Hatena::ブログ(Diary)

130単位

2009-10-30

Eclipseプラグイン 行末の空白除去をキャンセル

最近はPHPの開発にEclipseを使うことが多いです。Pleiades(PDT)のAll in Oneパッケージです。

で、WordPressなんかで既存のコードを拡張して、コミット時に差分表示させてみると、やけに変更箇所が多いことがあったりします。これはEclipseプラグインの機能で行末のスペースがトリミングされているためみたいです。んでしばらく放置していたのですがいい加減しんどくなってきたので、少し調べてみたら設定で変えられることがわかりました。

以下のプラグインが整形をしてくれていたみたいです。

AnyEdit tools plugin for Eclipse
http://andrei.gmxhome.de/anyedit/

f:id:deeeki:20091030123116j:image

これで若干効率UPできそうです。


関連記事:
Eclipse(PDT+Subversive)によるPHP開発環境構築 - 130単位

2009-10-29

TwitBird Lite 1.2を使ってみた

TwitBird(Lite) - オススメ Twitterクライアント | iPhone 研究室
http://iphone-lab.net/2009/10/27/twitbirdlite-%e3%82%aa%e3%82%b9%e3%82%b9%e3%83%a1-twitter%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88.html

こちらの記事を読んで触発され、早速本日1日使ってみてました。内容ほとんどかぶってしまいますが、軽く紹介がてらメモ。Liteのほうがバージョンナンバリングが進んでいるからか、Proにない機能があったりします。

  • TwitBird Lite 1.2のみでできること
    • 背景画像の変更
    • 未読Postの最初に移動
    • 吹き出しフリック/ダブルタップでReplyなど操作
    • Post詳細画面で会話の流れ表示
    • あとで読む用の外部サービス連携
    • クライアント表示が「TwitBird」になる*1
  • TwitBird Lite 1.2でできないこと

個人的に気に入ったのは、Post詳細画面で会話の流れが追えること。SimplyTweetでもできますが、タップが1回分少なく済みます。

そんなわけで今までProをメインに使ってきてましたが、Liteに乗り換えようかと思います。もともとアカウントひとつしかないですし。ちなみに投稿画面へ行くのにタップ2回必要なのは相変わらずです。ぜひ改善を期待したいところです。

画像付きで詳しく解説されているので、ぜひ元記事も参照ください!

f:id:deeeki:20091029233308j:image

TwitBird Lite (iTunes Store) TwitBird twitter anywhere

f:id:deeeki:20091029233259j:image

TwitBird Pro (iTunes Store) TwitBird Pro ~ the twitter app


関連記事:
TwitBird Proを一週間ほど使ってみた - 130単位
iPhone 無料のTwitterクライアントを5種類比べてみた - 130単位

*1:Pro1.1.1だと「Web」になる

2009-10-27

お名前.com .infoドメイン取得手順

お名前.comで.infoドメイン10円キャンペーンが開催されています(10/29正午まで)。

キャンペーンはもう5回目くらいなのではないでしょうか。

かくいう自分も釣られて10個取得してしまいました。ドメイン取得は初めてだったので、その手順をメモっておきます。

ドメイン取得

  • ドメイン名を考える
  • ドメイン名をフォームに入力する
  • 取得可能か確認して選択する
    • 一度に10個まで取得できる
  • 登録手続きへ進む
    • 初めてなら会員情報を入力する
  • 登録完了
    • 受付通知メールおよび完了通知メールがくる
参考リンク

ドメインが有効かどうか確認できるWebサービスです。

Ajax Whois 2.0 - fast domain name search and whois
http://ajaxwhois.com/

Nameboy Ultimate Domain Name Generator, search, creation, domain name lookup and domain registration
http://www.nameboy.com/

Whois代行

個人で登録したままの状態だと、Whois検索によって自宅住所や電話番号がわかってしまいます。以下で確認できます。

ドメイン取るなら お名前.com:Whoisドメイン検索

このWhois情報をオプションサービスで代行してもらいます。

参考リンク
ドメイン取るなら お名前.com:Whois情報公開代行
http://www.onamae.com/service/d-regist/option.html

ドメイン/IPアドレスwhois情報検索】
http://www.cman.jp/network/support/ip.html

【追記】

.com、.net、.jpドメインは今だとムームードメインがお得みたいです(11/9正午まで)。

2009-10-26

WordPress SQLのエラー出力を自動化

WordPressSQLのエラー出力を(自動で)行う方法を調べていました。ざっと以下のような感じになっていました。

  • すべてのSQLはwpdb#query()を通る
  • wpdb#query()でエラーが発生すると、wpdb#print_error()が呼ばれる
  • 条件によって3種類の出力がある

(※WordPress MU 2.8.4a)

ログファイル出力その1

出力条件
  • $wpdbのshow_errorsプロパティをtrueにしておく
  • 定数'ERRORLOGFILE'でログファイルを定義しておく

画面出力+実行中断

出力条件
  • $wpdbのshow_errorsプロパティをtrueにしておく
  • 定数'DIEONDBERROR'をtrueで定義しておく

ログファイル出力その2

出力条件
  • PHPの設定'error_log'にファイルを定義しておく

こちらはエラー内容だけでなくてエラー時のSQLも出力してくれます。

デフォルトの状態だとやや見づらいので、改行を入れるようにしてみてます。

wp-includes/wp-db.php L602-

<?php
if ( $caller = $this->get_caller() )
    //$error_str = sprintf(/*WP_I18N_DB_QUERY_ERROR_FULL*/'WordPress database error %1$s for query %2$s made by %3$s'/*/WP_I18N_DB_QUERY_ERROR_FULL*/, $str, $this->last_query, $caller);
    $error_str = sprintf("WordPress database error \n%s\n-- for query --\n%s\n-- made by --\n%s", $str, $this->last_query, $caller);
else
    //$error_str = sprintf(/*WP_I18N_DB_QUERY_ERROR*/'WordPress database error %1$s for query %2$s'/*/WP_I18N_DB_QUERY_ERROR*/, $str, $this->last_query);
    $error_str = sprintf("WordPress database error \n%s\n-- for query --%s", $str, $this->last_query);

利用サンプル

プラグインとしてファイルを作成して、エラー出力させるようにしました。画面出力とログ出力その2の併用です。MUならプラグイン定義不要でmu-pluginsフォルダに入れるだけで有効化することができます。

<?php
define('DIEONDBERROR', true);
//define('ERRORLOGFILE', ABSPATH . '/error.log');

ini_set('error_log', ABSPATH . '/error.log');
global $wpdb;
$wpdb->show_errors();

ちなみにshow_errorsをtrueにするにはwp-config.phpとかに'WP_DEBUG'を定義しても可能ですが、他にも影響してNoticeエラーがたくさん出てきてしまうのでやめました。

2009-10-21

WordPress MU 2.8系でFlutterを使用すると「サイト管理」メニューが消える

タイトルの通り、Flutterプラグインを使用すると「サイト管理」メニューが消えるので、それへの対処のメモ。WordPress MU 2.8系からメニューの生成方法が変わったっぽいのと、そもそもFlutterのコードがまずいのが原因でした。

Flutter : WordPress CMS Plugin by Freshout
http://flutter.freshout.us/

2種類の対処方法を載せておきます。

Flutterのコードを直接修正

  • fresh-page/RCCWP_Menu.phpの397行目、AttachCustomWritePanelMenuItems()内
  • 新しくメニューの配列を作っているところがまずい
    • キー'5'があらわれた時点でbreakしている
    • 既存メニュー配列に後から追加されているキー'2'の「サイト管理」が無視されてしまう
<?php
foreach ($menu as $k => $v) {
    //if($k > 5) break;
    if($k > 5) continue;
    $new_menu[$k]=$v;
}

フックで対処

  • wp-admin/includes/mu.phpのwpmu_menu()で、「サイト管理」メニューが追加される
  • wpmu_menu()は優先度10で'_admin_menu'にフックされている
  • 優先度をそれ以降(例では11)にして同じ'_admin_menu'にフックする
    • foreach内でbreakされてもいいように、メニュー配列をキー順でソートしておく
  • この後にあるフック'admin_menu'で上記Flutterのクラスメソッドが実行される
<?php
function admin_menu_ex() {
    global $menu;

    ksort($menu);//キー順にソート
}
add_action('_admin_menu', 'admin_menu_ex', 11, 1);

WordPress MU 2.8.4aとFlutter1.0で検証&確認

※Flutterの最新バージョンは1.1ですが、上記コードはそのままでした


関連記事:
WordPressプラグイン Flutter 画像アップロードのエラー対処 - 130単位

2009-10-20

BuddyPress 1.1系向けの自作プラグインを旧バージョンに対応させる

1.1系からコアな関数の一部に変更があったようで、1.1系向けに作成したBuddyPressプラグインが1.0系ではうまく動きません。そこで、半ば強引に動かすようにしてみようというのが今回の主旨です。

手順は以下です。

  • 1.1系で新規追加された関数を定義したファイルを作成
  • BuddyPressのバージョンを確認して、必要なら読み込む

1.1系向けのプラグインを旧BuddyPressで動かすと、主にメニューを生成してるところで未定義の関数呼び出しのエラーが発生します。確認できたのはメニュー追加、サブメニュー追加、アバター画像取得の3つの関数です。これらをまるごとコピーしてきてファイルに記述し、自作プラグインフォルダに加えます。

bp-myplugin/includes/quirks.php

<?php
function bp_core_new_nav_item( $args = '' ) {
    //... buddypress/bp-core.phpよりコピー
}

function bp_core_new_subnav_item( $args = '' ) {
    //... buddypress/bp-core.phpよりコピー
}

function bp_core_fetch_avatar( $args = '' ) {
    //... buddypress/bp-core/bp-core-avatars.phpよりコピー
}

あとは、BuddyPress本体のバージョンが1.1より小さければ、上記で作成した後方互換用のファイルを読み込むようにします。

<?php
if (version_compare(BP_VERSION, '1.1', '<')) {
    require_once(WP_PLUGIN_DIR . '/bp-myplugin/includes/quirks.php');
}

細かくはみていないのですが、これで一応は動くようになりました(※1.0.3で確認)。


関連記事:
BuddyPress1.1.1 スケルトンコンポーネントを利用する - 130単位
ローカルPCにWordPress MUとBuddyPressをインストール - 130単位

2009-10-19

BuddyPress1.1.1 スケルトンコンポーネントを利用する

WordPress :  BuddyPress Skeleton Component ≪ WordPress Plugins
http://wordpress.org/extend/plugins/buddypress-skeleton-component/

BuddyPress用のプラグインを作成する際に、その土台として利用できるプラグインです。BuddyPress1.1.1のリリースと同時に1.3が新しくリリースされていました。活動(activity)や通知(notification)と連携した一通りの簡単な機能も備えており、サンプルとしても有用です。

ただ、普通に有効にしようとしたらうまくいきませんでした。こんなエラーが表示されます。

f:id:deeeki:20091019194604j:image

どうやら同名の関数定義が原因っぽいです。ということで、bp-example.phpの104行目をコメントアウト

<?php
/* The widgets file should contain code to create and register widgets for the component */
//require ( WP_PLUGIN_DIR . '/bp-example/bp-example-widgets.php' );

これで有効化することができました(ウィジェット機能は使えなくなっているかもしれませんが、未確認)。

ちなみに、配布アーカイブの中身ではbp-exampleディレクトリの外にbp-example.phpがありますが、ディレクトリの中に入れてしまっても問題なく動きました。


関連記事:
ローカルPCにWordPress MUとBuddyPressをインストール - 130単位

2009-10-18

ローカルPCにWordPress MUとBuddyPressをインストール

あらためて最新バージョンにて環境構築してみたので、そのメモです。Windows上でXAMPPの利用を想定してます。

アーカイブ取得

【追記】上記でBuddyPress 日本語リソースではフォーラム機能が翻訳されません。ので、別の方の1.1用リソースもリンクしておきます。

ファイル配置

  • WPMU本体を解凍して適当な位置に移動 (必要ならディレクトリ名も変更)
  • wordpress-mu/wp-contents/以下にlanguagesディレクトリ作成
  • WPMU日本語リソース解凍してlanguages以下に移動
    • 実際に要るのはja.moのみ、ja.poは編集する際に必要なファイル
  • BuddyPressプラグイン解凍してwordpress-mu/wp-contents/plugins以下に移動
  • BuddyPress日本語リソース解凍してplugins/buddypress/bp-languages以下に移動
  • plugins/buddypress/bp-themes/以下のbp-defaultとbp-sn-parentをwp-contents/themes以下に移動
    • BuddyPress1.1.1からテーマの利用方法が変更されたみたい
    • ひとつのテーマディレクトリでWPMU本体とメンバーページの両方に対応になった
    • BuddyPress1.0以前はメンバーページのテーマをwp-contents/bp-themes以下に入れていた

Apacheなど設定

  • hostsファイル編集 (C:¥WINDOWS¥system32¥drivers¥etc¥hosts)
127.0.0.1       wpmu.dev    #記述例
LoadModule rewrite_module modules/mod_rewrite.so

XAMPPの入手やconfファイル記述内容は以下参考

ローカルPCにWordPress MUをインストール - 130単位


データベース作成

※ユーザー作成から行う場合は以下参考

ローカルPCにWordPress MUをインストール - 130単位

WordPress MUインストール

初期設定

f:id:deeeki:20091018225159j:image

  • サイト管理->テーマからBuddyPressのテーマを有効化

f:id:deeeki:20091018225147j:image

  • 外観->テーマからBuddyPressのテーマを適用
    • 「BuddyPress Social Network Parent Theme」は最低限のシンプルなレイアウト
    • 「BuddyPress Default」は上記を土台にスタイルを変えたもの
  • 設定->パーマリンク設定を一度クリックしておく
    • ブログの個別記事ページがうまく表示されないため
  • ユーザー登録を許可する場合
    • サイト管理->設定から「新規登録を許可する」の設定を変更

で、「BuddyPress Social Network Parent Theme」だとこんな感じになります。

f:id:deeeki:20091018225129j:image

*1:何かしら設定しないと届かないけど

2009-10-16

ニュース関連の無料iPhoneアプリ 5種類

f:id:deeeki:20091016220312j:image

産経新聞

産経新聞

  • 新聞まるごと読める
  • 毎週木曜掲載(たぶん)のWeb面が楽しみ
  • 3G環境だとズームの際に多少時間かかったりする

f:id:deeeki:20091016212423j:image

GNReader

GNReader

  • Googleニュースのリーダー
  • 各新聞社のニュースが見られる
  • 全文読めないニュースもある
  • オフライン閲覧可能
  • 記事詳細画面から直接別カテゴリに遷移可能

f:id:deeeki:20091016212414j:image

N-News

N-News

  • NIKKEI NET(日経新聞)専用のリーダー
  • 「企業」カテゴリが個人的には興味深い
  • 若干レスポンスやUIに改善点がある気がする

f:id:deeeki:20091016212401j:image

あらたにす

あらたにす

  • 読売・朝日・日経のニュースヘッドライン
  • ニュース全文読めない
  • トップのUIはおもしろい

f:id:deeeki:20091016212340j:image

i47NEWS

i47NEWS

f:id:deeeki:20091016212324j:image

雑感

しばらくの間全てのアプリを1画面目に入れて使い比べたりしてましたが、このたび残すのを3つに絞りました。まずGNReader。ニュースの種類も多く、これらの中では最も使い勝手がいいと思います。で、産経新聞。他とは異質なアプリですが、新聞を読んでる感に浸れるのがいいです。この2つは一軍です。そしてN-News。多少なりとも経済に触れるために必要かなーと思い残しました。


関連記事:
Tumblrの無料iPhoneアプリ 4種類 - 130単位
iPhone 3GS 購入3ヶ月目の利用アプリ一覧 - 130単位
画像加工できる無料iPhoneアプリ 4種類 - 130単位
カメラ関係の無料iPhoneアプリ 3種類 - 130単位

2009-10-15

100均(ダイソー)のiPhone用フィルム 2種類比較

deeeki自転車iPhoneフィルムきずついてもうた。100円だからいいけど
xbrg_kobaえ?100円なの?RT @deeeki: 自転車iPhoneフィルムきずついてもうた。100円だからいいけど
deeekiコレですね http://bit.ly/c50Qx RT @xbrg_koba: え?100円なの?RT @deeeki: 自転車iPhoneフィルムきずついてもうた。100円だからいいけど
xbrg_kobaありがとう!買います RT @deeeki: コレですね http://bit.ly/c50Qx RT @xbrg_koba: え?100円なの?

そんなわけで、買っておいた別のフィルムに交換してみました。

フィルムその1(交換前)

商品画像

f:id:deeeki:20091015201205j:image

iPhone×フィルム

f:id:deeeki:20091015201151j:image

右側中央にキズがついてます。

特徴
  • 貼りやすい(空気入りにくい)
  • サイズに余裕がある
  • ボタンの下側に空きがある
  • アンチグレア
  • 指紋つきにくい

フィルムその2(交換後)

商品画像

f:id:deeeki:20091015201144j:image

iPhone×フィルム

f:id:deeeki:20091015201143j:image

若干空気が入ってしまいました。

特徴
  • 貼るのむずかしい(空気入りやすい)
  • サイズほぼぴったり
  • ボタンの周りが円形
  • 光沢ありなタイプ
  • 指紋つきやすい

個人的には、フィルムその1のほうが好みな感じです。サラサラした手触りが良かったです。

f:id:deeeki:20091015201142j:image

まだ買っておいた予備があるので、何かあってもすぐ替えられます。100円フィルム++。


関連記事:
iPhone 3GS ケースを購入&装着した - 130単位
iPhone ケース購入で参考になるページ4つ+1 - 130単位

2009-10-14

WordPress ダッシュボードでメールアドレスの重複登録を許可する

※あまり好ましくない内容のカスタマイズですので、参考にされる場合は十分ご注意ください

ダッシュボードでのユーザー登録/更新時に必ず通るedit_user()。その中のフック'user_profile_update_errors'を利用します。本来はソースのコメントにもあるように、プラグインによるエラーの追加をするためのフックだと思われますが、それを逆用するかたちになります。

<?php
function user_profile_update_errors_ex($errors, $update, $user) {
    if (current_user_can('edit_users') && in_array('email_exists', $errors->get_error_codes())) {
        unset($errors->errors['email_exists']);
        unset($errors->error_data['email_exists']);
    }
}
add_action('user_profile_update_errors','user_profile_update_errors_ex',10, 3);

登録前のチェック処理にてメールアドレス重複時に付与されるエラー'email_exists'を解除しています。あとは上記コードをプラグインにするなどして有効化すれば重複登録が可能になると思います。

(※WordPress MU 2.8.4aで検証)

ちなみにパスワードを忘れた場合のリマインダーはどうなるかというと、ひとりのユーザーにしか送られない、はずだと思います*1


関連記事:
WordPress MU サイト管理者以外はダッシュボード非表示にする - 130単位
WordPress MU サイト管理者以外は公開記事のみ表示 - 130単位

*1:$wpdb->get_row()してるので、DBからSELECTしたときの最初のレコードのユーザーのみになる

2009-10-13

land.toサーバーの使用量をPHPで表示

2ヶ月ほど前に興味本位でTwitterのログまとめをland.toで始めたわけですが、ふと、サーバーの使用量が気になったのでした(最大100MB)。が、コントロールパネルではわからなかったので、PHPで表示させようと試みてみました。

使用量確認スクリプト

こちらの記事で紹介されている関数を利用させていただきます。

no title

<?php
$path = realpath(dirname());
$size = getDirSize($path); 
echo number_format($size) . ' byte used.';

/* 関数定義は省略 */

カレントディレクトリ絶対パスからサイズを取得し、表示時はフォーマットして多少読みやすくしてます。

このスクリプトをドキュメントルートに置いて実行すると、こんな感じになります。

23,797,495 byte used.

これで、気になったときにはスクリプトURLにアクセスすれば使用量を知ることができるようになりました。

別の方法

Linuxのコマンドでできないかなーと思って調べたら「du」というコマンドがあることを知りました。

ディレクトリ内のサイズを調べる --- du コマンド MISTY-NET UNIXコマンド講座

<?php
echo shell_exec('du -sh');

オプションは-sが指定ディレクトリのみ、-hがサイズに応じた単位表示、とのこと。

こんな感じでスクリプトが置かれたディレクトリ以下の容量合計がわかります。

26M . 

こちらのほうが1行で書けるのでおすすめかもです。


ちなみにland.toはLinuxじゃなくてFreeBSDでした。

サーバ仕様 無料ホームページ 無料レンタルサーバー land.to


関連記事:
land.toにWordPress2.8.4をインストール - 130単位

2009-10-12

htmlSQL データ抽出と簡易CSV出力のサンプル

jonasjohn.de: htmlSQL - a PHP class to query the web by an SQL like language
http://www.jonasjohn.de/lab/htmlsql.htm

取得サンプル

htmlからtable要素で書かれた中身のデータを取得したい場合を想定、です。

html
<html>
<body>
<table>
  <tr>
    <td>9/26-27</td><td>日本ガイシホール</td>
  </tr>
  <tr>
    <td>10/10-11</td><td>大阪城ホール</td>
  </tr>
  <tr>
    <td>10/14-15</td><td>横浜アリーナ</td>
  </tr>
  <tr>
    <td>10/29-30</td><td>横浜アリーナ</td>
  </tr>
</table>
</body>
</html>
php
<?php
include_once('snoopy.class.php');
include_once('htmlsql.class.php');

$wsql = new htmlsql();

$wsql->connect('url', 'http://example.com/'));
//tr要素を取得
$wsql->query('SELECT * FROM tr');

$rows = array();
foreach($wsql->fetch_array() as $tr) {
    $sub_wsql = new htmlsql();

    //tr要素の中身(html)を対象に
    $sub_wsql->connect('string', $tr['text']);
    //td要素を取得
    $sub_wsql->query('SELECT * FROM td');

    $cols = array();
    foreach($sub_wsql->fetch_array() as $td) {
        //td要素の中身からタグを除去して配列格納
        $cols[] = '"' . trim(strip_tags($td['text'])) . '"';
    }

    //CSVの一行ぶん
    $rows[] = implode(',', $cols);
}
//行を格納した配列を結合してCSV形式で画面出力
echo implode('<br/>', $rows);

レスポンスを書くのが面倒だったので、画面出力したテキストをコピペして.csv保存してね、という手抜き仕様です。あとエラーの処理とかも省いてます。

おまけ

取得対象htmlの範囲指定について
  • 要素の出現位置で指定
    • examples/demo_09.phpにサンプルあり
<?php
$wsql->select('table', 0);//1番目のtable要素を指定
$wsql->query('SELECT * FROM th');
  • idで指定
<?php
$wsql->query('SELECT * FROM table WHERE $id == "tabledata"');
$wsql->connect('string', $wsql->results[0]['text']);//先のクエリで取得したhtmlを対象に指定
$wsql->query('SELECT * FROM th');
  • 開始/終了位置を文字列で指定
    • htmlソースと一致していることが必要
<?php
$wsql->isolate_content('<table id="tabledata">', '</table>');
$wsql->query('SELECT * FROM th');

関連記事:
htmlSQLを使ってみた - 130単位

2009-10-11

PHP 4つの数字の組み合わせ作成

4つの数字の組み合わせを配列でつくる、という処理。二通り考えついたので、どちらが早いのか計測してみました。

<?php
function a(){
    $nums = str_split('0123456789');

    $pairs = array();
    foreach ($nums as $n1) {
        foreach ($nums as $n2) {
            foreach ($nums as $n3) {
                foreach ($nums as $n4) {
                    $pair = array($n1, $n2, $n3, $n4);
                    sort($pair);

                    if (in_array($pair, $pairs)) {
                        continue;
                    }
                    else {
                        $pairs[] = $pair;
                    }
                }
            }
        }
    }
    return $pairs;
}

function b(){
    $pairs = array();
    for($i = 0; $i < 10000; $i++) {
        $pair = str_split(sprintf('%04d', $i));
        sort($pair);

        if (in_array($pair, $pairs)) {
            continue;
        }
        else {
            $pairs[] = $pair;
        }
    }
    return $pairs;
}
functionab
1回目1.25443005562 sec.1.49999308586 sec.
2回目1.2515308857 sec.1.26858592033 sec.
3回目1.39041113853 sec.1.43742179871 sec.
4回目1.39106893539 sec.1.43886399269 sec.
5回目1.26893901825 sec.1.25613999367 sec.

さほど変わりませんでした。a()のほうがわずかに早いみたいです。

ただ配列の値が文字列だったりして微妙なので、あまり参考にはしないほうがいいと思います…。

2009-10-06

htmlSQLを使ってみた

jonasjohn.de: htmlSQL - a PHP class to query the web by an SQL like language
http://www.jonasjohn.de/lab/htmlsql.htm

htmlSQLっぽい記述でスクレイピングできるPHPライブラリです。更新は2006年で止まっているみたいですが、最新バージョン(0.5)は問題なくダウンロードできました。BSDライセンスです。

利用手順

  • 必要なファイルをインクルード
<?php
include_once("snoopy.class.php");
include_once("htmlsql.class.php");
<?php
$wsql = new htmlsql();
  • URLにアクセス
<?php
$wsql->connect('url', 'http://example.com/')
<?php
$wsql->query('SELECT * FROM a WHERE preg_match("|^http://.*html$|", $href)');
<?php
foreach($wsql->fetch_array() as $row) {
    echo $row['href'];
}
    • 各属性と内包するhtml(添字は"text")の連想配列として扱える

雑感

  • ローカル環境でも問題なく使えた
  • 2ファイルをインクルードするだけでよいので手軽
  • 同梱されているサンプルスクリプトを読めばだいたいできることが分かる
  • URLでなくてファイルや文字列に対しても適用可能
  • WHERE句でclass名などを指定する場合は「$class == "nav_item"」のようにイコール2つ必要
    • 要はPHPでの比較になってるんだと思う
  • 範囲を指定したい場合はhtmlsql#isolate_content()が使える
<?php
$wsql->isolate_content('<table>', '</table>');
$wsql->query('SELECT * FROM th');
  • 100ページ分のとあるデータの取得に約20秒程度かかった
  • とりあえずCSV形式で出力しておけば再利用や加工がしやすいと思う

参考リンク

floatingdays: htmlSQLの基本的な使い方
http://fdays.blogspot.com/2008/04/htmlsql.html

2009-10-03

Ubuntu 9.04 Desktopをインストールしてみた

Ubuntu Home Page | Ubuntu
http://www.ubuntu.com/

ML115の購入まで使っていたWindowsマシンが眠った状態になっていたので、Linuxを入れてみることにしました。

準備

インストール

  1. 言語の選択
    • 日本語
  2. 地域と都市の選択
    • Asia - Tokyo
  3. キーボード
  4. パーティション
  5. ユーザー
    • 適宜入力
      • ユーザーにdeeekiと入力したらコンピュータがdeeeki-desktopに自動補完された
  6. 確認してインストール開始

約15分ほどでインストール完了。

雑感とメモ

といったところで、いろいろわからないことだらけですが本日は終了です。

2009-10-01

9月分の読書記録

記録用のWebサービス読書メーターからメディアマーカーに乗り換えました。

とはいうものの、ついiPhone触ってしまったりしてなかなか読めず、特に後半は2週間で1冊という有様でした。

『なまけもののあなたがうまくいく57の法則』は、軽く読める自己啓発本で良かったと思います。マンガは『ONE PIECE』が面白かったです。


9月分読書データ

期間 : 2009年09月
読了数 : 9 冊
シリコンバレー精神 -グーグルを生むビジネス風土
★★★☆☆ 読了日:2009年9月30日
Linuxの勃興のあたりの話が興味深かった
バガボンド (31)
井上 雄彦 / 講談社 (2009-09-03)
★★★☆☆ 読了日:2009年9月16日
親の大きさがひしひしと感じられた。
なまけもののあなたがうまくいく57の法則
本田 直之 / 大和書房 (2009-07-16)
★★★★☆ 読了日:2009年9月12日
動機付けは自分の内部から。最初の10日で習慣化に力を注ぐ。人を巻き込む。(偉人の)言葉をおごる
大金星
水野 敬也 / 小学館 (2008-12-09)
★★★☆☆ 読了日:2009年9月11日
前半の主人公の成長プロセスがよい。後半は好き嫌いが分かれそう。結末はある意味予想外
組織が大きく変わる「最高の報酬」 トータル・リワードを活用した行動科学マネジメント
★★★☆☆ 読了日:2009年9月8日
金銭以外のさまざまな報酬を含む「トータル・リワード」が必要
4Gbpsを超えるWebサービス構築術
★★★★☆ 読了日:2009年9月8日
モバイルの技術が非常に参考になった。サーバ周りは必要になったときに再読する。
WEB+DB PRESS Vol.29
WEB+DB PRESS編集部 / 技術評論社 (2005-10-22)
★★★★☆ 読了日:2009年9月6日
『プロジェクトの人間関係構築術』特集がためになった。できることから実践してみたい
ONE PIECE 巻55 (ジャンプコミックス) (コミック)
尾田 栄一郎 / 集英社 (2009-09-04)
★★★★☆ 読了日:2009年9月6日
相変わらずの展開の早さ&面白さ。マゼランの毒の描写がいい
WEB+DB PRESS Vol.45
WEB+DB PRESS編集部 / 技術評論社 (2008-06-23)
★★★☆☆ 読了日:2009年9月3日
ケータイ開発を読了。やはりキャリアによる差違の吸収は大変。


メディアマーカー

8月分の読書記録 - 130単位