simplexml_load_file の落とし穴

なんかでかいxmlをwepごしに指定するとエラーが出るっぽい。

友達のを肩越しに見てただけだからあんまり良く見れなかったけど。

で、そういう時はfile_get_contentsを使ってコンテンツを取得してからsimplexml_load_string でパースするといいっぽい。

ただそれだけ。以上。

Windows Vista

なんでVistaって人気ないんだろうね。 ってか批判してる人の大部分はWEBで記事を書いてるライターって呼ばれる人だね。この人たちは声がでかいからね。その次に批判してるのがこういう人が書いた記事を読んで Vistaなんて使えない っていってる人。 実はね、俺もそうなんだよね{%表情お願いdeka%} 最後は、“きちんとした”企業で導入試験したらホントに使えなかった場合かね。こういう人はホントにかわいそうだと思う。 なむあむだぶつ。ち~ん そんで一番いいたいのは、Webの記事を見ながら批判してる人間はきっと実際にVista流の使い方を覚えればいいんだとおもう。 ちょうどWindows3.1使ってた人がWindows95を使おうとしたときみたいにね。 あのころもいろいろあったでしょ。 あんときはみんなから待ちわびられてたけどね。 マイクロソフトMojave実験の教訓「XP利用者はVistaと知らなければVistaが大好き」

Usermin with LDAP

Cent OS 5でLDAP認証環境でUseminでパスワードの変更をさせる方法。

参考:Windowsネットワーク用統合認証サーバー構築(OpenLDAP+Samba) - Fedoraで自宅サーバー構築の下のほう

参考:kmwebnet: CentOS4でLDAP + Usermin

参考:第2回 LDAPによるパスワードの一元管理の3ページ目

ポイントは

  • Authen::PAMのインストール

  • UseminにLDAPユーザーを認識させる

  • UserminでLDAPパスワードを変更させる

    かな?

    まず、Authen::PAMのインストール。cpanでインストールするときにpam-devilパッケージが必要。

    これだけ書いておけばいいでしょ。備忘録的に。

    つぎ、LDAPユーザーの使用を許す。

    まず/etc/pam.d/userminの中身を以下のように書き換える。全部。追加じゃないよ。

    #%PAM-1.0

    auth required pam_stack.so service=system-auth

    account required pam_stack.so service=system-auth

    password required pam_stack.so service=system-auth

    session required pam_stack.so service=system-auth

    そんつぎ。/etc/usermin/changepass/configの中のpasswd_cmd=fileをpasswd_cmdに(fileを削除)

    これでuserminにログインできるはず。

    そんで仕上げ。/usr/libexec/usermin/changepass/changepass.cgiを書き換える。

    if ($msg =~ /old|current|login/i) { → if ($msg =~ /login/ ) {

    これでパスワードの変更ができるようになる。

  • ML115 で Wake on Lan

    ml115wake on lanを使う方法。

    参考:はかつまぶろぐ - MA20V/B + CentOS + Wake on LANな話

    参考:独学Linux:遠隔操作でLAN内PCの電源を入れる方法 - livedoor Blog(ブログ)

    参考:Wakeonlan

    起こされるホスト:ML115 with debian/etch

    起こしてくれるホスト:Fedora Core 3

    まず、ML115MACアドレスを取得。00:...っていうやつ。ifconfigってやると出てくる。HWaddr 00:XX:XX:XX:XX:XXってやつね。そいつをメモしておく。

    次に実際にマジックパケットで起きれるように設定。

    ML115

    # apt-get install ethtool

    とやって必要なパッケージをインストール。つぎに/etc/rc.localのexitの上に次の1行を追加。

    /usr/sbin/ethtool -s eth0 wol g

    これでML115のほうの設定は終わり。

    今度は起こすほうの設定。

    Fedoraのほうで

    で起こすツールを導入。完了。

    起こし方:

    fedora

    # wakeonlan 00:XX:XX:XX:XX:XX

    これでおきてくるはず。

    debian/etch で raidを構成

    なんか巷にはシステムのインストール時に設定する方法はいっぱいあるんだけど、動いてるシステムに追加する方法ってのは見つからない。。。 で、ようやく見つけたところを参考に、追加する方法。 参考:Debian初心者のA2Z -8- 前提条件: このくらいかな? まず、パッケージをインストール。
    # apt-get install mdadm
    つぎに、ディスクを2台つないで再起動。こればかりはしょうがない。 その後fdiskで新しいディスクのパーティンションを切る。パーティンションのサイズは2台とも同じくして、タイプは"fd"で。 そしていよいよアレイの作成。便宜上、上で作ったパーティンションが/dev/sdb1と/dev/sdc1だとしておく。。。
    # mdadm --create /dev/md0 --level=raid1 --raid-devices=2 missing /dev/sdb1
    これでraidは縮退モードで動き出すはず。これの意味はたぶん、
    • /dev/md0デバイスを作成する
    • raidは1(ミラーリング
    • 2つのデバイスを使って片方は"missing"(まだ作ってない)、もう片方は/dev/sdb1にする。
    次に今できたraidパーティンションをフォーマット。
    # mke2fs -j /dev/md0
    これでたぶんマウントできるはず。
    # mount /dev/md0 /hoge/hoge
    でマウントして書き込んだりできるか確認。 これでできたらもう片方もraidについか。
    # mdadm /dev/md0 -a /dev/sdc1
    これでraidのビルドが始まるはず。ビルドの進捗報告は
    # cat /proc/mdstat
    でわかるはず。 ディスクの交換とかはその辺にごろごろあるからそこら辺を参考に。システムがクラッシュしたときに新しい環境で今作ったraidを読めるかが問題。どこかでできるとは読んだけど。。。 あと、残念だけど、急遽、raidじゃなくて定期バックアップで運用することになっちゃった。 raidだと、消したファイルは戻せないもんね。バックアップから戻したいんだってさ。

    VMware on Debian

    Debianの上でVMware serverを動かす方法。

    参考:[Debian] VMware Server 1.0.4インストール

    まずdebianをインストール。 自分はほぼ最小構成でインストールしてみた。

    で、とりあえず、/etc/apt/sources.listの中でCDを指定してるところをコメントアウト

    そしてとりあえず、

    # apt-get update

    # apt-get install ssh

    sshをセットアップ。これないと不便だから。

    つぎ、vmware-serverをダウンロード。 tar.gz版をダウンロードしてくる。ついでにライセンスキーも取得。これはメールアドレスとか登録しないとだめだね。無料だからいいけど。

    で、インストール方法。

    まず必要なパッケージをインストール。

    # apt-get install gcc make linux-headers-`uname -r` psmisc libX11-6 libxext6 libxtst6 libxt6 libice6 libxrender1

    いよいよvmwareのインストール。

    /usr/local/srcに入って、まず解凍。

    # tar zxvf ~/VMware-server-1.0.4-56528.tar.gz

    # cd vmware-server-distrib/

    で、インストール

    # ./vmware-install.pl

    いろんな質問が出てくるけど大体Enterでいいはず。あと途中でconsoleに接続するためのポート番号が表示されるはず。たぶん902。途中でネットワークについて聞かれるっぽい。使い方に合わせて答えればいいでしょう。まぁそのままEnterでいいか。

    で最後にシリアルナンバー聞かれるから答える。

    これで完了。あとはリブートしちゃいましょ。どうせまだ何も動いてないからいいよね?

    それかinetdをリロードすればクライアントからvmware-server consoleでアクセスできるようになってるはず。

    windowsマシンにでもvmware-server consoleをインストールすれば接続できるはず。

    パスワードとユーザー名を聞かれたらhostのユーザー名とパスワードでOK。

    完成。

    ウェブリブログのrss

    ってさ、descriptionところ最初の1行しか出さないよね?

    普通はそれでいんだけど、GREEとかで外部blogに指定すると最初の1行しか読めなくなるわけさ。パソコンからだったら「外部ブログへ移動」なんて感じのリンクがあるけど、携帯にはない。。。

    ってことで、descriptionの中にウェブリブログに書いた本文を丸ごと入れてやるrssプロクシを作ってみた。

    こんな感じ↓ めっちゃ簡単だね。昔phpでdomを使ったときはこんな簡単にはいかなかったし。あと、携帯だとaタグは無効にされちゃうみたいだね。そこら辺はどうしようか。。。。

    現時点での問題はもう1つ。本文の中で table 使ってると致命的ってこと。ただ /td を探してるからね。これはあとで直さないと。tdではじめる部分を数えて、そのぶん /td を読み飛ばせばいいのかな?

    ってかhtmlを簡単な方法でパースするほうほうってないのかな?JavaScriptのgetElementById見たいなのがあればめっちゃ楽チンなんだけど。

    誰か教えて!

    $rss = "http://gorakuru.at.webry.info/rss/index.rdf";

    $extender = new rssExtender();

    echo $extender->extend($rss);

    class rssExtender{

      function extend($rss){

        return $this->convert($rss);

      }

      function getBodybyUrl($url){

        $start = '<td id="blog-body">';

        $stop = '</td>';

        $charSet = 'Shift_JIS';

        $content = mb_convert_encoding(file_get_contents($url), 'UTF-8', $charSet);

        $content = mb_substr($content,

                             mb_strpos($content, $start, 0, 'UTF-8') + mb_strlen($start, 'UTF-8'),

                             mb_strlen($content, 'UTF-8'), 'UTF-8');

        $content = mb_substr($content,

                             0,

                             mb_strpos($content, $stop, 0, 'UTF-8'),

                             'UTF-8');

        $content = trim($content);

        return $content;

      }

      function convert($rss){

        $article = simplexml_load_file($rss);

        foreach($article->item as $item){

          $url = $item->link;

          $description = '<a href="'.$url.'">オリジナル→'.$url.'</a><br /><br />';

          $description .= $this->getBodybyUrl($url);

          $item->description = $description;

        }

        return $article->asXML();

      }

    }

    ?>