スタッフブログ

  • haltさんの最新配信
  • RSS

openpearの旅 第13回:HatenaSyntax

 : 技術全般 2009/6/18 19:01

Blogger's Avatar

haltです。今日は、はてな記法を解釈するライブラリ、HatenaSyntax ( http://openpear.org/package/HatenaSyntax )を紹介します。
HatenaSyntaxは、はてなダイアリーで使われている、はてな記法 ( http://hatenadiary.g.hatena.ne.jp/keyword/%e3%81%af%e3%81%a6%e3%81%aa%e8%a8%98%e6%b3%95%e4%b8%80%e8%a6%a7 ) を解釈します。

はてな記法を利用する事で、ユーザは、簡単な記号を書くだけで、HTMLの知識がなくても複雑な表現する事ができ、
サービス提供者側は、HTMLタグを直接使わなくても多様な表現ができる分、脆弱性発生のリスクを抑える事ができます。
(もちろんはてな記法の解釈に問題があって脆弱性が発生する可能性は受け入れる必要がありますが)

HatenaSyntaxの特徴は、「少ない行数で使える事」です。最低限の変換ができるだけでよければ、以下のコードで動きます。

require_once 'HatenaSyntax.php';

$str = '
  * header
';

echo HatenaSyntax::render($str);


HatenaSyntax.phpをrequireした後にHatenaSyntax::render()を実行するだけです。

ただし、HatenaSyntaxはPEGライブラリに依存しているので、こちらも同時にインストールしておく必要があります。

私は過去にPukiWiki記法をパースするライブラリを書いた事があるのですが、すべての構文をカバーする気力がなく、途中で力尽きました。
有名な記法ならなんでもよかったので、その時にHatenaSyntaxがあれば大幅に工数を減らせたのになーと昔の事を思いだしました。

openpearの旅 第12回:Services_Yahoo_JP_Furigana

 : 技術全般 2009/6/8 21:06

Blogger's Avatar

haltです.
ついさっき知ったのですが,「既存」という漢字の読みは「きそん」が正しいのですね.知らずに「きぞん」と読んでいました.(現在では「きぞん」と読む人が増えている為,「きぞん」でも間違いではありません)

ところでYahoo! Japanのサービスに「ルビ振りAPI ( http://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html ) 」があります.

ルブ振りAPIは既存をどう読むか調べてみましょう.
ルビ振りAPIを使うにはYahoo! デベロッパーズネットワークでアプリケーションIDを取得する必要があります. ( http://developer.yahoo.co.jp/ )

アプリケーションAPIを取得したら,pearコマンドでServices_Yahoo_JP_Furiganaをインストールします.このライブラリはServices_Yahooに依存しているので,-aオプションで一括インストールするか,別途インストールしておいてください.

pear install -a Services_Yahoo_JP_Furigana-alpha

インストールが完了したら,以下のコードを入力します.$app_idの部分には取得したヤフーのアプリケーションIDを入力してください.

<?php
require_once 'Services/Yahoo/JP/Furigana.php';

$app_id = '';

try {
    $yahoo = Services_Yahoo_JP_Furigana::factory('furigana');
    $yahoo->withAppID($app_id);
    $yahoo->setSentence('既存の設定で極小になっている');
    $yahoo->setGrade(1);
    $result = $yahoo->submit();

    $str = null;
    foreach ($result as $word) {
        $str .= isset($word['Furigana']) ? $word['Furigana'] : $word['Surface'];
    }
    echo $str . PHP_EOL;
} catch (Services_Yahoo_Exception $e) {
    die($e->getMessage());
}

これを実行すると「きそんのせっていできょくしょうになっている」と表示されます.やっぱり既存は「きそん」と読むんですね!
今まで間違えていた自分がはずかしいです

既存って
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1010669095

極小の読み方は (きょくしょう) (ごくしょう) どっちですか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1312031488?fr=rcmd_chie_detail

openpearの旅 第11回:PHP_Object

 : 技術全般 2009/5/28 21:34

Blogger's Avatar

haltです.

RubyやC#をはじめとした,純粋なオブジェクト指向言語を使ってプログラミングをした経験がある人は,PHPの適当さにクラクラしつつ「もっとオブジェクト指向したいなー」と思うのではないでしょうか.

そういった人の夢を少しだけ叶えてくれるのが今日紹介する.PHP_Object ( http://openpear.org/package/PHP_Object ) です.
インストールはいつものようにpearコマンドでインストールしたあと require_once 'PHP/Object.php'; を追加するだけです.

PHP_Objectは,文字や配列をオブジェクトとして扱えるようにしてくれます.
言葉で説明するよりも,実際のコードを見てもらう方が早いでしょう.
以下は,文字列を編集しているコードです.両端の「|」を削除したあと,中心にある「ZZZ」を削除して「ABCDEF」という文字列を作るというシンプルなものです.
まずは普通の書き方の場合.

$message = '|ABCZZZDEF|';
$message = trim($message, '|');
$message = str_replace('ZZZ', '', $message);
var_dump($message);

という感じになります.これをPHP_Objectを使ってかくと.

require_once 'PHP/Object.php';
$message = PHP_Object::factory('|ABCZZZDEF|')->trim('|')->replace('ZZZ', '')->var_dump;

というように書く事ができます.

PHP_Object::factoryによって,文字列が文字列オブジェクトとなり,PHPの関数を自らのメソッドとして呼ぶ事ができます.
このメソッドは通常のPHPのオブジェクトと同じ仕組みで動作しているので当然ながらメソッドチェーンも使えるようになります.メソッドチェーンのメリットは,文字通り鎖のように,最初の処理の結果が次の処理につながっていく事で読みやすくなる事です.
また,PHP_Object経由で文字列オブジェクトを作成すると,メソッド名の先頭にあるstrやstr_を省略する事ができます.上記コードで呼ばれているreplaceメソッドはstr_replaceです.これで,strposやstr_repeatのような,統一感のない関数名からも距離を置く事ができるようになります.

当然ながら,通常の文字列を操作するよりも,文字列オブジェクトを作って操作する方がメモリ消費が大きいので,使う場所についてはよく考える必要がありますが,非常におもしろいライブラリなので一度は使ってみると良いでしょう.

openpearの旅 第10回:Net_Socket_Tiarra

 : 技術全般 2009/5/20 16:38

Blogger's Avatar

haltです.
openpearのライブラリを紹介するのも今回で10回目になりました.

今回は,Net_Socket_Tiarra ( http://openpear.org/package/Net_Socket_Tiarra ) について紹介します.

Net_Scoket_Tiarraは,tiarra ( http://www.clovery.jp/tiarra/ ) という IRCゲートウェイから,ソケットを利用しての発言を実現するライブラリです.

IRC上に,定期的に情報を流したり,特定の条件に応じて自動的に発言する事などができるようになります.

Net_Socket_Tiarraを使うには,まずtiarraの設定を変更する必要があります.
tiarra.conf上にある,

 # control-socket-name: user

という部分を

 control-socket-name: ryus

のような感じで,コメントアウトします.

さらに,tiarra.confの下の方に

+ System::SendMessage {
}

を追加して,tiarraを再起動すれば,tiarra側の準備は完了です.
ちなみに,control-socket-nameの変更は,System::Reloadでは反映されないので,リロードではなく,再起動する必要があります.

あとは,tiarraが動いているマシンから,以下のようなコードを実行すれば,tiarraを通してIRCで発言できます.

<?php
require_once 'Net/Socket/Tiarra.php';

try {
  $tiarra = new Net_Socket_Tiarra('ryus');
  $tiarra->message('#channel@server', 'test message');
} catch (Exception $e) {
  var_dump($e->getMessage());
}
?>

自分は,ロイターのニュースや,帝国データバンクの倒産情報などを巡回してIRC上にタイトルとリンクを出すようにしてあります.
常に最新の情報が欲しい場合にIRCに出しておいて見えるようにしておくと,便利なので,やってみる事をおすすめします.

openpearの旅 第8回:HTML_CSS_Mobile

 : 技術全般 2009/5/9 2:55

Blogger's Avatar

正直毎回openpearの話を書くのはちょっと飽きてきました…

さて,今回はyudoufu氏が開発したHTML_CSS_Mobile ( http://openpear.org/package/HTML_CSS_Mobile ) について紹介します.
日本での主要な携帯電話キャリアは,docomo, au, softbankの3種類になり,携帯サイトを作る場合,
これら主要3キャリアでの表示が求められる事が多いです.
携帯電話のWeb周辺の仕様はキャリアによって異なり,docomoではCookieが使えなかったり,
絵文字の仕様がバラバラで,表示先のキャリアを判別して変換したりと,面倒な事がたくさんあるのですが,
その面倒な事の1つに,「docomoの場合,style属性でしかCSSを反映させられない」という問題があります.
auや,softbankの為に外部CSSや埋め込みCSSを書いても,docomoでは表示できない為,
処理をふりわける必要があります.
しかし,毎回特定のタグが出るたびにstyle属性を追加していくのは非常に面倒です.

HTML_CSS_Mobileを使うと,外部CSSを解析して,style属性にしてHTMLのタグに追加してくれます.
これを利用する事で,外部CSSを書いて,docomoの時だけ
HTML_CSS_Mobileでstyle属性に変換する事で3キャリアの対応ができるようになります,

使い方もほとんど説明する必要はありません.インストールしたら,最終出力部分を$htmlとして持っておいて,
以下のように記述するだけです.
なお,このパッケージを利用するには,PEARのHTML_CSS, HTML_Commonが必要になるので注意してください.

require_once 'HTML/CSS/Mobile.php';
$html = HTML_CSS_Mobile::getInstance()->apply($html);

$htmlの中にあるHTMLをパースして,外部CSSの指定部分を抽出.そこからCSSファイルを読み込んで,
style属性にしてくれます.すごいですね.

最近モバイルサイト構築の勉強をした時に使ってみたのですが,
HTML_CSS_MobileなしでCSSを使うのはかなり無謀だなと思いました.
モバイル関係の方は絶対チェックしておく事をオススメします.

openpearの旅 第7回:Net_Pocketbell

 : 技術全般 2009/4/23 19:45

Blogger's Avatar

今日はNet_Pocketbell ( http://openpear.org/package/Net_Pocketbell ) というライブラリを紹介します.
このライブラリは,ポケベル打ちの数値とカナを変換するライブラリです.

ポケベル打ちとは,ポケットベルにおいて,プッシュ信号によって数桁の数字を送れる機能を利用して,数字の組み合わせを文字と判定して表示を行う方法で,現代では,携帯電話の文字入力方式の1つに利用され,「2タッチ方式」などと呼ばれています.
基本的には,1タッチ目が母音で,「1,2,3,4,5」が「あ,か,さ,た,な」になり,2タッチ目が子音になっています.
「11」で「あ」,「12」で「い」という感じです.
通常の携帯電話の入力方式は,一文字確定するのに最大で5回押す事になりますが,2タッチの場合は常に2回なので,従来の方式よりも高速に入力する事ができるといわれています.

http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%B1%E3%83%99%E3%83%AB%E6%89%93%E3%81%A1
http://ja.wikipedia.org/wiki/%E7%84%A1%E7%B7%9A%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97

女子高生が公衆電話のボタンを超高速で連打していたのはわずか10年前の事ですから,技術の進歩の速度には驚かされます.

ともかく,今回のライブラリを使うと,

228513618512440322443354

という数値を打った時に,

キヨウハヨイテンキテスネ

に変換してくれます.
使い方は簡単で,

$pb = new Pocketbell('NTT');
echo $pb->num2kana('228513618512440322443354') . "\n";

とすれば,引数に指定した数字の内容が.

$pb = new Pocketbell('NTT');
echo $pb->kana2num('キョウハヨイテンキデスネ');

とすれば,数値が表示されます.

ただし,2タッチで表示できない(組み合わせにない)文字は表示できません.上の「キョウハヨイテンキデスネ」という文章は,「ョ」と「デ」が存在しないため,この2つの文字を抜いた,「22136185124403223354」が表示されます.

また,「あ」から「ん」までは割とどの機種でも同じなのですが,それ以外の文字については,機種依存が激しく,機種によって入力方法はまちまちです.

例えば,私が使っているSH906iにある「2タッチ入力方式」で0から9までの数値を表示する場合,

00969798999006070809

とします.しかし,これをNet_PocketbellのNTT方式に適用すると,

0↑↓[時計][電話]9/‐& 

となってしまい,意図した通りに表示されません.

今の携帯の2タッチ入力の再現に利用するのは難しいですが,昔なつかしのポケベル文化に触れるという意味ではなかなかおもしろいライブラリです.

openpearの旅 第6回:Services_MixiAPI

 : 技術全般 2009/4/15 1:01

Blogger's Avatar

haltです.
mixiが誰でも参加できるようになって随分立ちますね.mixiやってますか?

今日は,mixiの足あと情報を始めとする情報にアクセスできるライブラリ,Serices_MixiAPI ( http://openpear.org/package/Services_MixiAPI ) を紹介します.

このライブラリは,mixiステーションというmixiが提供するサービスが利用しているapiをPHP側から叩く事で,mixiから様々な情報を取得できます.

mixiには,自分のページにアクセスした人の名前がわかる「足あと」という機能があります.足あとは,最大60件までしか表示できないので,「自分のページに誰がアクセスしたのかことこまかに知りたい!」という自分大好きな人は細かくアクセスしてチェックする必要があります.

今回はServices_MixiAPIを利用してPHPから足あとを取得します.MixiAPIから返ってくるデータはXMLなので,PHP5から使えるSimpleXMLを利用して,ある程度読めるように加工して表示します.

require_once "Services/MixiAPI/Factory.php";

$user = 'あなたのログインメールアドレス';
$pass = 'あなたのパスワード';
$id = 'あなたのmixi id(ログインして,「プロフィールを見る」からわかります)';

$service = Services_MixiAPI_Factory::getInstance(
               Services_MixiAPI_Factory::API_MODE_FOOTPRINT,
               $user, $pass, $id);
$service->execute();
$xml = new SimpleXMLElement($service->get());
foreach ($xml->entry as $entry) {
    echo "[{$entry->updated}] " . $entry->author->name  . "\n";
}

これを実行すると,

[2009-04-14T14:51:03Z] xxxxxx
[2009-04-14T14:31:58Z] xxxxxxxxx
[2009-04-14T13:59:47Z] xxxxx
[2009-04-14T12:29:28Z] xxxxxxxxxxxxxxx
[2009-04-14T11:33:13Z] xxxxx
[2009-04-14T11:17:58Z] xxx
[2009-04-14T11:00:27Z] xxxxxxx
[2009-04-14T10:52:19Z] xxxxx
[2009-04-14T09:50:04Z] xxxxx
[2009-04-14T07:47:23Z] xxxxxxxxxx

のような感じで,足あとの一覧が表示されます(xxxxはアクセスした人の名前です)
これを定期的に実行し,アクセスログとして保存すれば,自分のページにアクセスした人を把握する事ができます.

MixiAPIには他にもたくさんの情報を見る機能があるので,実際に試してみてください.

openpearの旅 第5回:Services_ThreeLines

 : 技術全般 2009/4/3 21:09

Blogger's Avatar

haltです.

最近電子工作にハマっていて,PICを使ってLEDを点灯させたりしているのですが,CPUにあたる内蔵オシレータが8MHzしかないので,
普段何GHzのパソコンの上で動くコードと違い,1クロックというレベルでのリソース管理を要求されるので,なかなかおもしろいです.

さて,今回のopenpearパッケージは,Services_ThreeLines ( http://openpear.org/package/Services_ThreeLines ) です.このライブラリは,3行で要約します.( http://www.3lines.info/ )というサービスを利用するラ
イブラリで,これを利用する事で,特定のサイトやRSSの内容を3行に要約する事ができます.

require_once "Services/ThreeLines.php";

$url = 'http://ryus.co.jp/';

try {
    $summary = Services_ThreeLines::execute($url);
    echo $summary;
}
catch (Exception $e) {
    echo $e->getMessage();
}

これを実行すると…

[blockquote]
・XOOPS Cubeとは、掲示板に書き込むような感覚で手軽にホームページの更新ができるようになるCMS(コンテンツ・マネージメント・システム)のひとつです。

・XOOPS Cube を利用したホームページの制作、イントラサイトの構築、そして XOOPS Cube のモジュール開発からカスタマイズまで、XOOPS Cube のことでしたら>、まず RYUS にご相談ください。
[/blockquote]

あれ,2行になっています.しかし要約の内容についてはかなり的確ですね.大量に登録されているサイトの概要が必要な時なんかには使えるのかもしれません.お
もしろい使い方を見つけたら教えてください.

openpearの旅 第4回:Services_Hanako

 : 技術全般 2009/3/25 22:40

Blogger's Avatar

最初は,紹介するパッケージがなくなってしまうかと心配していたのですが,openpear.orgのパッケージ数は順調に増えており,当分の間はネタに困る事はなさそうです.

さて,この季節花粉症に悩む人達は多いのではないでしょうか.私はたまに目がかゆくなる程度なので,花粉症ではないと自分に言い聞かせていますが,人によっては外出する事もできないくらいひどくなるそうですね.

今日紹介するのは,花粉の飛散量を調べてくれる,Services_Hanakoというパッケージです.
おなじみpearコマンドでインストールしてみましょう.

sudo pear install -a openpear/Services_Hanako

Services_Hanakoを動かすにはPEARのライブラリである,HTTP_Request2が必要です.pearコマンドに-aをつける事で,自動的にインストールする事ができますが,pearコマンドを使わず手動でインストールした場合は,HTTP_Request2と,HTTP_Request2が依存しているNet_URL2も一緒にダウンロードしてください.

インストールが終わったら,以下のように書きます.

<?php
require_once "Services/Hanako.php";

$hanako = new Services_Hanako('03', '51300200');
var_dump($hanako->now());

これを実行すると,以下のような配列の値が表示されます.これが花粉に関する情報です.

array(7) {
  ["hour"]=>
  string(5) "21時"
  ["pollen"]=>
  string(1) "0"
  ["wd"]=>
  string(9) "北北西"
  ["ws"]=>
  string(1) "4"
  ["temp"]=>
  string(3) "6.3"
  ["prec"]=>
  string(1) "1"
  ["prec_bool"]=>
  string(6) "無し"
}

hourが取得時間,pollenは飛散数です.1立法メートルあたりの花粉の飛散量になります.wdは風向き,wsは風速,tempは気温,precは降水量になります.

コンストラクタの引数に,エリアコードと,観測所コードを入力する事で,指定の観測所のデータを取得する形になっています.上記データは,東京都の日本医科大学付属病院にある観測所からのデータです.
以下は関東の観測所の一覧です.

県名:観測所の名称 - エリアコード - 観測所コード

という形式で並べてあります.いろいろ値を変えて試してみるとおもしろいのではないでしょうか.

[blockquote]
茨城県:水戸石川一般環境大気測定局 - 03 - 50810100
茨城県:独立行政法人国立環境研究所 - 03 - 50810200
茨城県:笠間市役所 - 03 - 50820100
栃木県:独協医科大学 - 03 - 50900100
栃木県:宇都宮市中央生涯学習センター - 03 - 50910100
栃木県:栃木県林業センター - 03 - 50920100
栃木県:日光特別地域気象観測所 - 03 - 50920200
群馬県:群馬県衛生環境研究所 - 03 - 51010100
群馬県:群馬県林木育種場 - 03 - 51020100
埼玉県:埼玉医科大学 - 03 - 51100100
埼玉県:さいたま市役所 - 03 - 51110200
埼玉県:飯能市役所 - 03 - 51120300
埼玉県:寄居町役場 - 03 - 51120400
千葉県:千葉大学 - 03 - 51200100
千葉県:日本医科大学付属千葉北総病院 - 03 - 51200200
千葉県:東邦大学付属病院 - 03 - 51200300
千葉県:東洋眼科医院 - 03 - 51200400
千葉県:君津中央病院 - 03 - 51200500
千葉県:亀田総合病院 - 03 - 51200600
千葉県:東邦大学 - 03 - 51210100
千葉県:千葉県環境研究センター - 03 - 51210200
千葉県:千葉県森林研究センター - 03 - 51220100
千葉県:君津市糠田測定局 - 03 - 51220200
東京都:日本医科大学付属多摩永山病院 - 03 - 51300100
東京都:日本医科大学付属病院 - 03 - 51300200
東京都:東京都多摩小平保健所 - 03 - 51310200
東京都:独立行政法人森林総研多摩森林科学園 - 03 - 51320100
神奈川県:国立相模原病院 - 03 - 51400100
神奈川県:日本医科大学武蔵小杉病院 - 03 - 51400200
神奈川県:神奈川県庁分庁舎 - 03 - 51410100
神奈川県:川崎市衛生研究所 - 03 - 51410200
神奈川県:神奈川県自然環境保全センター - 03 - 51420100
[/blockquote]

openpearの旅 第3回:Image_Colorful

 : 技術全般 2009/3/13 17:30

Blogger's Avatar

今日はオシャレな画像が簡単に作れるImage_Colorfulを紹介します.
どんな風にオシャレかというと,以下のような感じです.



サイトには明記されていませんが,動作にはGDが必要なようです.インストールは,いつも通り

sudo pear install openpear/Image_Colorful

でいけます.openpearをはじめて利用する人はpear channel-discover openpear.orgしてください.

インストールしたら,以下のコードを書くだけです.

require_once 'Image/Image_Colorful.php';

$image = new Image_Colorful(400,100,175,1);
$image->addColors(150,150,150);

$font_path = '/usr/share/fonts/truetype/kochi/kochi-gothic.ttf';

$image->addTexts(
    '株式会社RYUS',
    $font_path,
    '30',
    '10',
    '10',
    array(0,0,0),
    'CENTER'
);

$image->getGenerateImage('png');

$font_pathには,フォントの場所を指定してください.WindowsかLinuxでフォントの場所が違うので
,自分の環境にあわせて変更する必要があります.

リロードするとわかるのですが,背景のデザインは毎回変わるので,自分だけのユニークな画像を作
る事ができます.Image_ColorfulでおしゃれなWeb素材作成してみませんか?

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.