safariをちょろっとみてたら、

Ubuntu Hacks: Tips & Tools for Humanizing Linux (Hacks)

ちょwwwUbuntu Hackswwwwwww オライリーからそんなマニアックなの出てんのかよ。全然話聞かないよ! これは怪しい、おれが知らないだけで世間では大流行?ということで調べてみました。まず、は“Ubuntu Linux”これが何て読むのかわからねーんだよ!

はてなダイアリー – Ubuntu Linuxとは

Debianをベースにしたディストリビューションの一つ

  • ふりがな:うぶんつりなっくす

なるほど、うぶんつ。人の名前?

Ubuntu-この新しいLinuxディストリビューションはちょっと違う – ZDNet Japan

Ubuntuのこの哲学は、他のLinuxディストリビューションに対してよく聞かれる不満を解消するものだ。なかでも以下の点はとくに重要といえる:

  • 定期的なリリーススケジュール
  • 一定したメンテナンス期間(この場合は18カ月)
  • 無償で利用できること

Ubuntu LinuxはDebianベースのデスクトップ向けディストリビューションだそうです。Debianとの重要な違いは ”定期的なリリース”と“デスクトップ向けにインストールCDやパッケージが手っ取り早い状態になってること”なようです。基本的にDebianでも一手間かければ同じ状態になる感じだそうです。

Debian最高!でも、

デスクトップで使うには軽く面倒・・・ → CentOS行こか!

って人ニーズってこと!? それと個人/趣味使用ならカスタマイズが醍醐味!もありだけど社内のOSとして導入なんつー場合にはこっちの方が良さそう。大抵のDebianパッケージはそのまま動くらしいです。

InformationWeek | Google | Google Confirms Using Ubuntu Linux, Won’t Say Why | 1 31, 2006

Google Inc. on Tuesday confirmed that it is using Ubuntu desktop Linux technology internally, but remained tightlipped about its purpose.

Googleが社内でUbuntuをデスクトップで利用?じわじわ来てんのかな!?

FrapprJapan PHP Users Groupのとこをみてて気づいたんですが、

beatcraft.png

ちょwww離宮wwwwwwwww うそつけwwww

変数の状態を表示するdBugの紹介 – HotPHPPER News

きれいなprint_r()系の奴。PEAR Var_Dumpとかと違って気になったのはresource型も展開してるとこ。どうやってるんだろ。

switch(get_resource_type($var)) {
    case "fbsql result":
    case "mssql result":
    case "msql query":
    case "pgsql result":
    case "sybase-db result":
    case "sybase-ct result":
    case "mysql result":
        <strong>$db=current(explode(" ",get_resource_type($var)));</strong>
        $this-&gt;varIsDBResource($var,$db);
        break;
    case "gd":
        $this-&gt;varIsGDResource($var);
    break;
    case "xml":
        $this-&gt;varIsXmlResource($var);
        break;
    default:
        echo get_resource_type($var).$this-&gt;closeTDRow();
        break;
}

なるほど・・・。

resouce型一覧に無いから勘だけど、

*** dBug.php.bk 2006-02-15 07:55:27.000000000 +0900
--- dBug.php    2006-02-15 07:55:10.000000000 +0900
***************
*** 262,267 ****
--- 262,268 ----
                        case "sybase-db result":
                        case "sybase-ct result":
                        case "mysql result":
+                       case "sqlite result":
                                $db=current(explode(" ",get_resource_type($var)));
                                $this-&gt;varIsDBResource($var,$db);
                                break;

とかしたらsqliteもいけそ。

Kazuho@Cybozu Labs: mod_webdev

mod_webdev は、一言で言うと、条件つき mod_rewrite です。特殊なクッキーを伴ったリクエストについてのみ、ファイル名を書き換えることで、開発者が開発中のファイルをテストすることができます。

気味が良いツール。(そんな言葉あるのか知らんが) なんか何でも一から自分の頭で考える人感がしますよ。 そういう人は信頼できるなーって思いました。

何かしら本がないとトイレ(大)入れない。

今日は急な便意でしょうがなかったとはいえ、GDBハンドブックでは間が持たない・・・。

GDBハンドブック
  • GDBハンドブック
  • オライリージャパン(2005-09)
  • (著)アーノルド ロビンス
  • (原著)Arnold Robbins
  • (翻訳)千住 治郎
  • 定価:¥ 1,260
  • 新品価格:¥ 1,260
  • 中古価格:¥ 960
  • ASIN:487311246X
p0t: XML食わず嫌い

PEAR::XML_RPCはHTTP/1.0なのでバーチャルホスト相手はだめなんですよね SerendipityではHTTP_Requestも併用したもので実装しました パッチ作ってコミットさせてもらいました http://sourceforge.net/mailarchive/forum.php?thread_id=7556980&forum_id=31275

投稿者 ELF : 2006年02月10日 23:33

な、なんだってー! (長くなるのでエントリーで返信)

XML-RPC Specification

Overview

XML-RPC is a Remote Procedure Calling protocol that works over the Internet.

An XML-RPC message is an HTTP-POST request. The body of the request is in XML. A procedure executes on the server and the value it returns is also formatted in XML.

Procedure parameters can be scalars, numbers, strings, dates, etc.; and can also be complex record and list structures.

XML-RPCの仕様には単にHTTP-POST requestとしか書いてないっぽい。ということはServerもClientも1.1対応してた方がいいけど別に必須ってわけじゃないってことかな?

PEARの方を見てみる。

[cvs] View of /pear/XML_RPC/RPC.php

    /**
     * Transmit the RPC request via HTTP 1.0 protocol
     *
     * @param object $msg       the XML_RPC_Message object
     * @param int    $timeout   how many seconds to wait for the request
     *
     * @return object  an XML_RPC_Response object.  0 is returned if any
     *                  problems happen.
     *
     * @see XML_RPC_Message, XML_RPC_Client::XML_RPC_Client(),
     *      XML_RPC_Client::setCredentials()
     */
    function send($msg, $timeout = 0)
    {
        if (!is_a($msg, 'XML_RPC_Message')) {
            $this->errstr = 'send()\'s $msg parameter must be an'
                          . ' XML_RPC_Message object.';
            $this->raiseError($this-&gt;errstr, XML_RPC_ERROR_PROGRAMMING);
            return 0;
        }
        $msg-&gt;debug = $this-&gt;debug;
        return $this-><strong>sendPayloadHTTP10</strong>($msg, $this-&gt;server, $this-&gt;port,
                                        $timeout, $this-&gt;username,
                                        $this->password);
    }

ん、sendPayloadHTTP10()・・・? (XML-RPCで送る中身のことをペイロードっていうらしい)

    /**
     * Transmit the RPC request via HTTP 1.0 protocol
     *
     * Requests should be sent using XML_RPC_Client send() rather than
     * calling this method directly.
     *
     * @param object $msg       the XML_RPC_Message object
     * @param string $server    the server to send the request to
     * @param int    $port      the server port send the request to
     * @param int    $timeout   how many seconds to wait for the request
     *                           before giving up
     * @param string $username  a user name for accessing the RPC server
     * @param string $password  a password for accessing the RPC server
     *
     * @return object  an XML_RPC_Response object.  0 is returned if any
     *                  problems happen.
     *
     * @access protected
     * @see XML_RPC_Client::send()
     */
    function sendPayloadHTTP10($msg, $server, $port, $timeout = 0,
                               $username = '', $password = '')
    {
    (略)

うわっ、ホントだよ。 おれも上鍵さんのパッチをパクろ・・・。

SourceForge.net: php-blog-devs

$req = new HTTP_Request( "http://".$service["host"].$service["path"]);
$req-&gt;setMethod(HTTP_REQUEST_METHOD_POST);
$req-&gt;addHeader( "Content-Type", "text/xml");
$req-&gt;addRawPostData( $message-&gt;payload);
$http_result = $req-&gt;sendRequest();
michael schurter >> Blog Archive >> Thank God for PHP_Compat

Thank God for PHP_Compat. Here’s how easy it is to use file_put_contents() in PHP4:

file_get_contents()が大好物なおれですが、そうなんですよ、PHP_Compatの何がThank Godなのかってfile_put_contents()がPHP4で使えることに決まってんだろ!ちったあ頭使え!コノ野郎!

fakemac:~% php -r 'require "PHP/Compat/Function/file_put_contents.php";
file_put_contents("foo.txt", "unk");'
fakemac:~% cat foo.txt
unk

オー ボーイ!

blogがらみの仕事でWeblogUpdates.Pingを飛ばす必要があったので毛嫌いしていたPEAR XML_RPCを使ってみました。

使ってみると・・・いいじゃないか!

デフォルトでインストールされるし! XML嫌いとか生のPOST厭だとかいってんじゃねーよ! > おれ APIとかすげー作ってみたくなってきた。

require_once("Net/URL.php");
require_once("XML/RPC.php");

/**
 * WeblogUpdates.Pingを飛ばす
 *
 * @param string $ping_server_url PingサーバのURL
 * @param string $blog_name blog名
 * @param string $blog_url blogのURL
 * @return boolean Ping送信に成功したらTRUE、失敗したらFALSE
 * @see Net_URL
 * @see XML_RPC_Client::send()
 */
function sendWeblogUpdatesPing($ping_server_url, $blog_name, $blog_url) {
    $url = new Net_URL($ping_server_url);
    $msg = new XML_RPC_Message('weblogUpdates.ping', array(new XML_RPC_Value($blog_name), new XML_RPC_Value($blog_url)));
    $cli = new XML_RPC_Client($url->path, $url->host, $url->port);
    $resp = $cli->send($msg);

    if (!$resp) {
        trigger_error("sendWeblogUpdatesPing(): ".$cli->errstr, E_USER_NOTICE);
        return FALSE;
    }

    if ($resp->faultCode()) {
        $msg = "sendWeblogUpdatesPing(): Failed to send ping. Fault Code: ".
            $resp->faultCode()." Fault Reson: ".$resp->faultString();
        trriger_error($msg, E_USER_NOTICE);
        return FALSE;
    }
    return TRUE;
}
p0t: 地味コード

PHP::Compatを使わぬとは! PEARへの愛が足りぬ!

投稿者 halt : 2006年02月07日 14:52

haltさんの叱咤によりPEAR愛が高まったというかPHP::Compatに俄然興味が出たので調べてみました。

PHP::Compatのcompatはcompatibility(互換性)の略で、後のバージョンで新しく出来た関数や定数をヘボイバージョンにも提供してくれる素晴らしいライブラリだそうです。 特に前述のPATH_SEPARATOR(: or ;)やDIRECTORY_SEPARATOR(/ or \)やPHP_EOL(\n or \r\n or \r)などの無いと激しく萎える存在を提供してくれるのでありがたい。関数も単体でloadできるのでシンプルで良い。 アプリに手を入れずに古いPHPで動かしたい場合にiniのauto_prepend_fileディレクティブにこれらの読み込みファイルを設定してみるっつーのも試してみる価値ありそう!

ついでに気になったPHP_CompatInfoも調べてみました。

PEAR :: Package :: PHP_CompatInfo

>> Description PHP_CompatInfo will parse a file/folder/script/array to find out the minimum version and extensions required for it to run. Features advanced debug output which shows which functions require which version and CLI output script

こっちはPHPのコードを調べてバージョンいくつ以上で動くのか調べてくれるらしい。試しにmojavi-all-classes.phpを調べてみました。

fakemac:~/src/mojavi-2.0.0% cat ~/project/php-examples/compat/compatinfo.php
#!/usr/bin/env php
&lt;?php
require_once("PHP/CompatInfo/Cli.php");
$ci = new PHP_CompatInfo_Cli();
$ci-&gt;run();
?&gt;
fakemac:~/src/mojavi-2.0.0% ~/project/php-examples/compat/compatinfo.php --file=mojavi-all-classes.php
+------------------------+---------+------------+------------------+
| File                   | Version | Extensions | Constants/Tokens |
+------------------------+---------+------------+------------------+
| mojavi-all-classes.php | 5.0.0   | session    | implements       |
|                        |         |            | interface        |
|                        |         |            | protected        |
|                        |         |            | private          |
|                        |         |            | __LINE__         |
|                        |         |            | final            |
|                        |         |            | clone            |
|                        |         |            | throw            |
|                        |         |            | catch            |
|                        |         |            | abstract         |
+------------------------+---------+------------+------------------+

5.0.0?んなこたぁないハズ。おれの理解が間違ってるのかも!

debian woodyのPHP 4.1.2でPATH_SEPARATORが無いとお嘆きの方へ。

!defined("PATH_SEPARATOR") and strtoupper(substr(PHP_OS, 0, 3) !== "WIN") ? define("PATH_SEPARATOR", ":") : define("PATH_SEPARATOR", ";");