<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>omnioo lab.</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/" />
    <link rel="self" type="application/atom+xml" href="http://omnioo.com/omnioolab/atom.xml" />
    <id>tag:omnioo.com,2009-11-07:/omnioolab//31</id>
    <updated>2010-07-28T15:46:48Z</updated>
    <subtitle>オムニオ・ラボ</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.02</generator>

<entry>
    <title>プログラムの設計</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/cat391/post-86.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1121</id>

    <published>2010-07-28T15:42:03Z</published>
    <updated>2010-07-28T15:46:48Z</updated>

    <summary>　少々大規模な（という表現はちょっとおかしいですが）案件に対しての設計について幾...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="IT関係" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Idee" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="エッセイ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="idea" label="idea" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="idee" label="Idee" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　少々大規模な（という表現はちょっとおかしいですが）案件に対しての設計について幾つかメモをしておこうと思います。大規模設計になるとブログなんかにはごく一部しかその技術やメモが公開されないので、特に秘密というわけじゃないですけど、あんまり巷では書かれていないことをメモしておこうと思います。<br /><br />

<h1>分業とライブラリー</h1>
　大規模な設計で特に必要なのは、その機能（Function)の使い回しです。車輪の発明は行ってはならないというわけです。そういうわけで一度使った作業プロセスを保存しまた後から使えるようにするという機能が各言語に必ず備わっています。言語によってその言い方は様々ですが、それらをユーザー定義関数と言ったり、単に関数と言ったり、サブルーチンと言ったり、ファンクションと言ったり、いろいろですが要は全く同じ機能を概念化したものです。これらの機能にはいわゆる「引数」と「返り値」があります。引数や返り値にも様々な言い方があります。パラメーターとかリターンとか...。そもそも西洋産なので翻訳にバラツキがあったりそもそもの原語も違ったりで用語が錯綜しておりますが、これも要は全く同じ機能です。これらの<br /><ul><li>引数（パラメーター）</li><li>関数（ユーザー定義関数）</li><li>返り値（リターン値）</li></ul>は、３つ合わせてはじめて機能します。勿論引数のない関数もありますし、返り値のない関数もありますが、大規模な開発の中では引数や返り値がない関数は殆どないと言っても過言ではありません。それは原因と結果の概念と同じだからです。ある原因（引数）はある事情（関数）を通してある結果（返り値）を生み出します。そしてその最後の結果は次の事情の原因になるわけです。プログラムでも同様で、ある返り値は次の関数の引数になります。これらの連鎖と分岐が複雑で大規模な開発につながってゆきます。<br />　それらの関数が上手に使いまわせるようにするためには、機能ごとに役割を分散させる必要があります。これらの機能の分散化を「クラス化」といってもよいと思います。それぞれの機能は、その機能特有のデフォルト値を持っています。例えば連番を発生させる関数には何も指定しない限り「0からスタートさせてください。」というような決まりをつくるとします。もしかしたらプログラムの概念ではなくて日常生活の概念を主に扱う連番の発生を望むのなら、「１からスタートさせてください。」という命令が9割を占めるかもしれません。そういう場合には、スタートさせるための0とか1とかいうデフォルトの値を持っていなくてはなりません。そういった値をクラス変数として定義することができます。この変数はその機能（関数）に特有の値なので通常の変数とは別扱いにします。それらのクラス変数を使った関数のことをメソッドという言い方をしたります。つまり、<br /><ul><li>引数（パラメーター）</li><li>クラス変数（その機能特有の変数（値））</li><li>メソッド（その機能）</li><li>返り値</li></ul>という４つの流れといいますか動きを使ったものが「クラス」というものです。これはオブジェクト指向とかいったりもします。これらの概念は大規模な開発には必ず必要です。<br /><br />　さて、なぜに関数化、クラス化（オブジェクト化）するのがよいのかというと、ある機能をブラックボックス的に使用できるという分業化が可能だからです。例えばあなたがあるプログラムを作成中に連番を発生させる必要があるとします。手の空いている誰かに連番を発生させる関数を作って、返り値は配列に入れて渡してね、といいます。手の空いている人はそれらの機能を本体から分離させて作成することができます。そして作成したらライブラリーに収めます。あなたはライブラリーからその機能を呼び出して、返り値の配列だけを取り出せばいいわけです。勿論実際はもっと複雑です。もっと複雑な機能を関数やクラスに落とし込んで使うのです。これらの関数やクラスは大量に作成され、ある一定の場所にカテゴライズされ整然と保存されます。これをライブラリー化といいます。図書館のように必要なときに訪ねて借りて、不必要になったら返すわけです。<br /><br />

<h1>デバックとエラーログ</h1>
　このブラックボックス化というのは、ある引数を与えて期待する返り値が出力さえすればそれでよいという単純な発想です。あなたが誰かに電話をします。そしてその誰かと話すことができます。あなたは電波のことやコンデンサーのことやキャリアのことや機器のメンテナンスについて何も知る必要がありません。しかしそれぞれの機能はそれぞれのタイミングできちんと行われているのです。関数やクラスもそれぞれに与えられた仕事をしているだけです。<br />　大規模な開発ではプログラム言語は実に人間の組織のように設計されます。各機能は分業され、それらの連結で作業が進みます。各機能の長は時折ミーティングします。またそれぞれの部署（機能）に問題がないか監査するというのも組織の役割の一部です。プログラムの開発ではデバック（監査）が欠かせません。それぞれの関数（部署）が問題があればエラーログを吐くという機能を開発段階で盛り込まないと後から犯人を捕まえることが不可能になります。<br /><br />

<h1>可逆性と不可逆性</h1>　数学や科学の世界では不思議なことがあります。水を冷却すると氷にすることができます。また氷を温めると水に戻ります。これは可逆性があるからです。やさしい数学の世界では可逆性のある性質が殆どですが、実際の現実や複雑な数学になると不可逆性が起こります。MD5やSHA1といった暗号化のアルゴリズムは不可逆性の性質をもったアルゴリズムです。暗号なので可逆性によって読み解かれてしまったら困るのです。これはちょっと難しい世界の話ですが、プログラムを実行して走らせると複雑な処理になればなるほど可逆性を保つのが難しくなります。詳細な設計図や並外れた暗記力、または独創的な天才の一人舞台以外の場所では可逆性を維持することにも努力を払うことになります。つまりある設定や実行後の状態を元に戻すことができるという機能です。<br />　例えばコマンドにはその可逆性が装備されています。MySQLのSQL文は、データベースの「作成」&lt;=&gt;「削除」が可能です。しかしこのコマンド...一度削除してしまったら同じものを作成するこはできません。しかし開発段階ではこの作業が必要になってきます。作成したら削除する機能。削除したら（程度にもよりますが）もう一度作成できる機能が必要です。これらの作業の種類には、<br /><ul><li>「作成」&lt;=&gt;「削除」</li><li>「変更」&lt;=&gt;「戻す」</li></ul>という風になります。ここで必要になってくる機能が「バックアップ」です。<br />　プログラムというものは魔物でして、例えば「変更」&lt;=&gt;「戻す」&lt;=&gt;「変更」...という作業を数千回繰り返してもきちんと前後に正しく機能するという関数を作ったとしましょう。例えばエポックスタンプから時間。時間からエポックスタンプという変換を行うとそれらはきちんと機能します。しかしエポックスタンプが2038年に達した時には正しく機能しないのです。2038年問題といわれていますが、これは困ります。これはかなり先の未来の話ですが、プログラムという魔物を侮ってはいけません。正しく機能しているつもりがどこかでバグるのです。<br />　少なくともDatabaseを自動作成する関数を作成した場合には、自動的に削除する関数も必要になるわけです。<br /><br />　<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>PerlのCPANを使う</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/perl/perlcpan.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.814</id>

    <published>2010-07-25T19:20:34Z</published>
    <updated>2010-07-26T14:40:15Z</updated>

    <summary>　Perlの非常に便利なモジュール群をインストールするには通常CPANからダウン...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="Engine &amp; Object" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="knowlege" label="Knowlege" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="skill" label="Skill" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　Perlの非常に便利なモジュール群をインストールするには通常CPANからダウンロードしてくるのが一番よいアイディアです。以下のコマンドで殆どOKです。モジュール名をそのまま指定してインストールします。<blockquote><code># perl -MCPAN -e shell</code><br /><code>Terminal does not support AddHistory.</code><br /><code></code><br /><code>cpan shell -- CPAN exploration and modules installation (v1.7601)</code><br /><code>ReadLine support available (try 'install Bundle::CPAN')</code><br /><code></code><br /><code>cpan1&gt; install DBI</code><br /><code>cpan2&gt; install DBD::MySQL</code><br /><code>cpan3&gt; quit</code></blockquote> 　希にCPANからインストールできないモジュールがあります。Ubuntuの場合は、Synapticパッケージマネージャーやapt-getコマンドを使ってインストールできるPerlモジュールやライブラリーが多数あるので、そちらで試してみてください。例えば、Image::MagickはCAPNからインストールできませんが、<br /><blockquote># apt-get install -y imagemagick<br /># apt-get install -y perlmagick<br /></blockquote>でインストールできます。<br />　またperlのモジュールでGDは、Synapticから"GD-"で検索し、perlのグラフィック関連のモジュールとライブラリーをインストールするとPerlで使えるようになります。<br /><br />　時折何度トライしてもインストールができないモジュールがありますが、以下のようにしてチャレンジしてみてください。<br />例えば、Crypt::DSAというモジュールをインストールしたい場合には、どうしてだか、install Crypt::DSAではインストールできません。そういう場合は、そのモジュールの親クラスであるCryptを最初にインストールします。親クラスのインストールが完了したら続けて子クラス（Crypt::DSA）のインストールが可能です。<br /><blockquote>cpan1&gt; install Crypt<br />cpan2&gt; install Crypt::DSA<br /></blockquote><br />　また逆に親クラスからインストールすることができない場合もあります。そういう場合はダイレクトにインストールします。<br /><blockquote>cpan1&gt; install Cache::File<br /></blockquote><br />　これでだいたいのモジュールのインストールは可能だと思います。<br />]]>
        
    </content>
</entry>

<entry>
    <title>LAN内専用のネームサーバー構築</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/ubuntu-910/lan.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1120</id>

    <published>2010-07-23T15:10:12Z</published>
    <updated>2010-07-27T13:36:48Z</updated>

    <summary>　LAN内に複数の端末機がネットワーク上でつながっている場合は単純にLAN内専用...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="DNS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Server" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Ubuntu 9.10" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　LAN内に複数の端末機がネットワーク上でつながっている場合は単純にLAN内専用のネームサーバーを作ってやると非常に便利です。LAN内のホストが全部ドメインで引けるのでアクセスしやすくなります。またWeb開発などで外からWebサーバーにアクセスしたい場合など開発環境としてもよいです。<br /><br />

<h1>予備知識</h1>　LAN内でドメインを引けるようにするには、LAN内のIPアドレスがどんな風になっているのか確認する必要があります。私の環境ではBuffaloの標準的なルーターを使用していますのでネットワークアドレスはクラスCの192.168.11.0/24となっています。クラスAやクラスBであることは稀なのでここではクラスCであることを前提に話を進めます。<br />　LAN内のPCは固定IPアドレスである必要があります。DHCPサーバーなどの設定をしている場合はその設定を切って、それぞれのPCに固有のスタティックなIPアドレスを割り振る必要があります。（勿論、一部をDHCPサーバーで制御し、その他の一部を固定IPアドレスにするなどのネットワーク設計は可能ですが、ここではわかりやすくLAN内は固定IPアドレスであることを前提に話をします。）<br />　ネームサーバーとなるマシンには、この段階でlocalhost=127.0.0.1、myserver=192.168.11.8などいうような二つのIPアドレスを持つことになります。これは、そのマシン自身を指すIPアドレス127.0.0.1とLAN内でのIPアドレスを指す192.168.11.8というアドレスを持つことになるわけです。ここでは便宜的にそれぞれlocalhostとmyserverという名前で設定することにします。<br />　ここで設定する作業はいくつかの段階に分かれます。<br /><ol><li>正引き、逆引きのゾーンファイルの設定</li><li>LAN内からアクセスがあった場合にのみ作動するようにするviewステートメントの設定</li></ol><br />

<h1>ゾーンファイルの設定</h1>
　最低限必要なゾーンというのはどういうものかというと、いろいろあるのですが、bind9をインストールした時点でそれらの「最低限必要なゾーン」はすでに揃っています。<br /><blockquote>zone "." {<br />&nbsp;&nbsp;&nbsp; type hint;<br />&nbsp;&nbsp;&nbsp; file "/etc/bind/zoon/db.root";<br />};<br />zone "localhost" {<br />&nbsp;&nbsp;&nbsp; type master;<br />&nbsp;&nbsp;&nbsp; file "/etc/bind/zoon/db.local";<br />};<br />zone "127.in-addr.arpa" {<br />&nbsp;&nbsp;&nbsp; type master;<br />&nbsp;&nbsp;&nbsp; file "/etc/bind/zoon/db.127";<br />};<br />zone "0.in-addr.arpa" {<br />&nbsp;&nbsp;&nbsp; type master;<br />&nbsp;&nbsp;&nbsp; file "/etc/bind/zoon/db.0";<br />};<br />zone "255.in-addr.arpa" {<br />&nbsp;&nbsp;&nbsp; type master;<br />&nbsp;&nbsp;&nbsp; file "/etc/bind/zoon/db.255";<br />};<br /></blockquote>1. "."（ドット）ゾーン　これはDNSのRootサーバーのゾーンです。ドメイン空間すべてを表しています。<br />2. "localhost"ゾーン　これはそのbind9が設定されているマシンそれ自体のゾーンです。<br />3. "127.in-addr.arpa"　これは先のlocalhostの逆引きのゾーンです。127.0.0.1をさします。<br />4. "0.in-addr.arpa"　これはブロードキャストという特殊なゾーンです。LAN内のIPアドレス全体を表しています。<br />5. "255.in-addr.arpa"　これもブロードキャストという特殊なゾーンです。LAN内のIPアドレス全体を表しています。<br /><br />　これらのゾーンはあらかじめ設定されているので特に設定は必要ありません。<br /><br />

<h1>LAN内のゾーンを設定する</h1>　今bind9を運用しようとしているマシンのアドレスというものは実はいくつかダブっています。というのもDNSサーバーはドメイン空間とIPアドレスを変換するデータベース情報を提供するシステムなので、理屈からいっても端末のみのマシンであることはありえないということが前提になります。つまり他のネットワークにつながっているのが前提となるわけです。<br />　しかしネットワークにつながるにもサーバー自身を示す情報も必要です。そんなわけで、ループバックというマシンそれ自体を示す情報があります。<br /><blockquote>localhost &lt;=&gt; 127.0.0.1<br /></blockquote>それがそうです。<br />　そして前述したようにネットワークにつながっていることが前提となるわけですが、そのマシンに最も近いネットワークがLANになります。LANは端末マシンをいくつかつなげた小規模なネットワークです。ここで例にしているLANネットワークはCクラスになりますので、<br /><blockquote>example.com &lt;=&gt; 192.168.11.xxx (任意のIPアドレス)<br /></blockquote>というような情報が必要なのです。またこの先の設定になりますが、このサーバーマシンにはグローバルIPアドレス（固定IPアドレス）を割り振ることになります。また、このIPアドレスは固定IPアドレスである必要があります。というのもIPアドレスとドメインの変換を担うこのシステムは最も最初にアドレスの問い合わせをするサーバーになるのでIPアドレスは変化してはいけないのです。<br /><blockquote>example.com &lt;=&gt; 123.456.789.xxx (任意のグローバル固定IPアドレス)<br /></blockquote>となります。つまるところ、bind9を設定したマシンには少なくとも3種類のIPアドレスと正引き、逆引きを合わせると合計で６つのゾーンファイルが必要であることがわかります。<br />]]>
        
    </content>
</entry>

<entry>
    <title>rndcの導入</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/ubuntu-910/rndc.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1119</id>

    <published>2010-07-22T14:55:22Z</published>
    <updated>2010-07-22T15:38:55Z</updated>

    <summary>　bindを作動させるためには共通鍵による認証が必要です。といっても何のことだか...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="DNS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Server" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Ubuntu 9.10" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="dns" label="DNS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="network" label="Network" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="skill" label="Skill" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　bindを作動させるためには共通鍵による認証が必要です。といっても何のことだかさっぱりわからないと思いますので説明します。rndc(remote named deamon controller)はリモートホスト（別のサーバー）からbindを操作する際に必要とされる認証方式です。これがあると安全にbindにアクセスできるというわけです。実際にはrndcがなくてもbindは作動します。しかし複雑な設定をしてゆくさいにある時点から「認証できません！」という風にエラーになってしまいます。そういうわけなので結局のところ設定しなければならないハメになります。<br /><br />

<h1>rndc-keyの作成</h1>
　つまりは鍵の作成をしなくてはなりません。その鍵(key)は、共通鍵として作成されるのでシステムはその鍵を見比べてみて同じだったら「OK」といい、違ったら「ダメ」といいます。<br />　およそbindに関する解説本では、dnssec-keygenとかrndc-confgen -r /dev/randomを使ってくださいという風になっていますが、Ubuntuではダメみたいです。<br /><blockquote>rndc-confgen -r /dev/urandom &gt; rndc.conf<br /></blockquote>これだとイケます。なので上記を使ってみてください。<br />　注意事項ですが、後々設定すべきことなのですが、このrndc.confなるファイルは先の共通鍵認証の比較対象になる片方のファイルになります。このファイルは、/etc/rndc.confに置くことになるので、<br /><blockquote>rndc-confgen -r /dev/urandom &gt; <b>/etc/rndc.conf</b><br /></blockquote>か、またはそのディレクトリに移動して作成してください。パスが合っていればいいわけですので後からでもよいのですが。自分は、/etc/bind/rndc.confに置いてしまってエラーが出つづけて途方に暮れてしまいました。<br /><br />作成されたファイル（rndc.conf）の内容は以下のようになります。<br /><blockquote>key "rndc-key" {<br />&nbsp;&nbsp;&nbsp; algorithm hmac-md5;<br />&nbsp;&nbsp;&nbsp; secret "rN0pQ9++9xxxxxxxxxxxxxxx";<br />};<br /><br />options {<br />&nbsp;&nbsp;&nbsp; default-key "rndc-key";<br />&nbsp;&nbsp;&nbsp; default-server 127.0.0.1;<br />&nbsp;&nbsp;&nbsp; default-port 953;<br />};<br /># End of rndc.conf<br /><br /># Use with the following in named.conf, adjusting the allow list as needed:<br /># key "rndc-key" {<br /># &nbsp;&nbsp;&nbsp; algorithm hmac-md5;<br /># &nbsp;&nbsp;&nbsp; secret "rN0pQ9++9bUkwPHRAPowjA==";<br /># };<br /># <br /># controls {<br /># &nbsp;&nbsp;&nbsp; inet 127.0.0.1 port 953<br /># &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; allow { 127.0.0.1; } keys { "rndc-key"; };<br /># };<br /># End of named.conf<br /></blockquote>　このファイルはとりあえず、/etc/rndc.confに置いてそのままにしておきます。<br /><br />

<h1>named.confの設定</h1>　今度は先の共通鍵認証に比較対象になるもう一つのファイルなるものの作成をします。named.confを開いてrndc.confの以下の部分をコピーしてnamed.conf内に貼り付けます。<br /><blockquote>key "rndc-key" {<br />&nbsp;&nbsp;&nbsp; algorithm hmac-md5;<br />&nbsp;&nbsp;&nbsp; secret "rN0pQ9++9xxxxxxxxxxxxxxx";<br />};<br /></blockquote>　named.conf内であればどこに貼り付けても大丈夫です。最後でも最初でも大丈夫です。貼り付けたら保存します。最後に/etc/init.d/bind9 restartでエラーが出なければ成功です。<br /><br />

<h1>エラーのいろいろ</h1>　設定を間違うといろいろなエラーが出ます。まずは、<br />rndc.confが正しく/etc以下に置かれているか確認してください。<br />rndc.confに書かれているkeyのブロックが正しくnamed.conf内に書かれていることを確認してください。<br />そもそも/etc/bind9/rndc.keyファイルが存在するかどうか、また正しいファイル名になっているか確認してください。<br />　設定が間違っていると以下のようなエラーが出ます。<br /><br /><blockquote>rndc: connection to remote host closed<br />This may indicate that<br />* the remote server is using an older version of the command protocol,<br />* this host is not authorized to connect,<br />* the clocks are not synchronized, or<br />* the key is invalid.<br /></blockquote><blockquote>rndc: connect failed: 127.0.0.1#953: connection refused<br /></blockquote><blockquote>rndc: no server specified and no default<br /></blockquote>　そもそも953のUDPポートが開いていないなんてことはありませんでしょうか。<br /><br /><br /><br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>英語教育</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/cat391/-13-this-shower-does-not-work-in-my.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1118</id>

    <published>2010-07-18T14:40:37Z</published>
    <updated>2010-07-18T14:47:03Z</updated>

    <summary>　ひどくふわふわ浮いた英語教育の話というのがあって、英語教育というものが日本人の...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="エッセイ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="芸術・美術・哲学" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="idee" label="Idee" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　ひどくふわふわ浮いた英語教育の話というのがあって、英語教育というものが日本人の場合はかなりの確率で「私の夢、英語教育」というかなり不思議なコンセプトになってしまう場合があります。まともに英語を知っている方々は英語というものがどれだけ幅の広い言語であり、それぞれの国や地方でどのような進化を遂げているのか十分知っておられる。オーストラリアの田舎の牛飼いがオランダのアムステルダムの英語とは全く違うものだということを知っているし、シンガポールという国際都市の英語がイギリスの伝統的な英語（例えばシェークスピアの英語など）とはもう殆ど違う言語であるということを知っています。文法的にも三単現が全く無視されている英語もあるし、ニューヨークの人間だってリトルイタリーで話される奇妙なイタリア語なまりの英語を殆ど理解できない場合もある。そういうのがいわゆる「英語」なわけです。<br />　我々が学生時代に習った英語というのは、今にしてみればどこの英語のことなのかよくわかりませんが、アメリカのヤッピー英語か、またはイギリスの貴族英語が中心であるように思います。僕自身の経験では中学校1年から高校3年に至るまでの間にイギリス英語の発音と文法を教える先生は一人しかいませんでした。<br />　英語が国際語であることは確かなことで世界各国に赴く際には英語は非常に役に立ちます。しかし、我々が習ったような英語は殆ど役に立たないというのが本当のところだと思います。そして旅行の手引きみたいなものに載っている英語は結構役に立つわけですよ。<br /><blockquote>This shower does not work in my room.<br />I can not use this shower in my bothroom.<br /></blockquote>　ホテルに入ってシャワーが壊れていて使えなかったらとしたらかなり適当な英語で十分通じます。Cold water only!でも通じるかもしれないです。とにかく何でもいいわけです。こういった英語は現地で少しづつニュアンスを覚えてゆけるし何となく通じるようになることでコミュニケーションができるようになってくる。<br />　しかし不思議な日本の英語教育には「リンカーンの偉大な功績」みたいな英文とか「ベーブ・ルースの伝記」みたいなちょっとおかしなものが入ってくる。センター試験の英語長文にはかなりくだらないアメリカンジョークが出題されたり、今現在だったら「ジョブスのお仕事」みたいな英語長文が出題されたりするのでしょうか？ここら辺りの偏りが何だか非常におかしいわけです。<br />　日本の英語検定一級の試験にはインデアンの草履とかカーボーイが使っていたピストルの名前まで出てくる。誰でも知っているように結局のところ英語の能力はヒアリングでも文法でも何でもなくて単語力、つまりはその単語にまつわる歴史観やイデオロギー、またその影響力と関連事項ということが重要になってくるだけで、日本の英語教育でなされるような質問に答えられることではない...というのをみんな知っているわけです。知らないのはどういうわけか日本の英語教育者だけなのかもしれないということです。<br />　日本の英語教育にはどうして白人ばっかりなのか...というのはちょっと疑問。（いや、しかも、ネイティブじゃなかったりしてかなりおかしいです。発音がどうみても北欧系だったり...。真っ黒な黒人でもかなり綺麗な発音でわかりやすい英語を喋る人ってたくさんいますよ。）挙句の果てにNOVAでは先生と生徒の恋愛禁止とか...。愛に満ち溢れている（のかどうかわからないけど）白人男性からそれを奪うのはちょっと酷かと思います。それを最大の目的にしている人だっているわけですし。<br />　僕が思うに英語教育で必要なことは、世界史を単に英語で学ぶということだと思います。（世界地理でもいいです。）そういう教育をすれば今回のトルコ船がイスラエルに拿捕された事件だってもう少し日本でも話題になるでしょう。この大事件を他所に「民主党惨敗！」とかやっているのはおそらく日本だけだと思いますよ。各国の新聞ではこのイスラエルとパレスチナ自治区の問題を一番に取り上げているんだし。それでこれまた石油の値段が高騰したり暴落したり我々だってそんな他所の国の出来事ではない筈なんですよ。<br />　楽天の社内英語が話題になっていますが、後々のその効果はもっと後になって出てくるとして最初に成立するのは楽天内の独自の日本語英語のスタイル...でありまして例えば「うどん」とか「そば」とかいう言い方が独自の英語（つまり世界に全然通じない）英単語になってくるということが一番最初の現象になると思います。それはつまりオーストラリアの牛飼いが喋っている非常にローカルな英語と同じレベルであり、また楽天という会社の方向性に沿った独自の考え方が反映される特殊な英語になるのではないかと。英語を国際語にするのは実のところその本人だけの問題であって決して「英語」という言語の問題ではないと思われるわけです。ちなみに私の経験では私が理解することができた英語は、<br /><ul><li>ヨーロッパ人（特にフランス人、ドイツ人、オランダ人、デンマーク人、ベルギー人）が話す英語。</li><li>中国人、韓国人が話す英語。</li><li>日本の英語の先生が話す英語。</li></ul>だけですね。<br />　正直、全然国際的じゃない。<br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Google Mapの使い方</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/cat391/google-map.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1117</id>

    <published>2010-07-12T14:42:16Z</published>
    <updated>2010-07-12T15:13:10Z</updated>

    <summary>　Google MapはAPI公開ということで誰でも利用することが可能な非常に便...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="APIいろいろ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="IT関係" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="エッセイ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="芸術・美術・哲学" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ajax" label="Ajax" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[<a href="http://omnioo.com/omnioolab/assets_c/2010/07/atombom-610.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/atombom-610.php','popup','width=500,height=600,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/atombom-thumb-300x360-610.jpg" alt="atombom.jpg" class="mt-image-left" style="float: left; margin: 0pt 20px 20px 0pt;" height="360" width="300" /></a>　Google MapはAPI公開ということで誰でも利用することが可能な非常に便利なアプリなんです。私もそれらが使えるようにといろいろと勉強しGoogle Mapをこの<a href="http://omnioo.com/omnioolab/google_map_ver3.php">オムニオラボでも利用してみました</a>。Webデザインをする中でそのお店の場所を案内したりと結構商売にもなったわけですが、世の中にはこういう使い方もあるんですね。<br />　 <a href="http://www.carloslabs.com/node/20">CarlosLabs Ground Zero</a><br />&nbsp;Grround Zeroといえばそういうわけでして、要するに核爆弾を落としちゃうわけです。<br />&nbsp;これが非常によくできていまして、Thermal（熱風）、Pressure（爆風）、Fallout（放射能）とタブでもってその範囲を確認できます。地図もそれぞれの都市を検索できます。<br />&nbsp;何となく心よくないこのサイト、いろいろといじっているうちに私自身が最初に核爆弾を落としてみたところがどういうわけかロンドン。次いでユーヨーク。それから東京。昔住んでいたドイツの都市にはそれぞれ、フランクフルト、カールスルーエ、ミュンヘンなどなど。いろいろとやってみてしまったわけです。<br />　地図の下にあるバーでもって爆弾の種類が選べます。その中にはLittle Boy、つまり広島に落とされた原爆があります。その圧倒的な威力がわかると思います。現在核拡散の運動がオバマ大統領の元に世界的に広がっていますが、そういう最中で2009年に北朝鮮が核実験した爆弾もその中にあります。威力の程度はLittle Boy程度だということがよくわかります。しかしちょっと驚いたというか、もうなんといいますか、やばくてちょっと変な気分になっちゃったのは、<i>Asteroid Impact</i> （小惑星の衝突）ですね。ヨーロッパ全部がいっちゃってます。北京に落ちたとしたら日本もすっぽりと爆風域に入っちゃっています。これはすごいですね。恐竜絶滅しますね。<br />　という小惑星衝突というオチがあるのでまだ救われますが、こりゃなんていいますか...冷戦時代はペンタゴンの参謀と上級軍人しかモニターできなかったようなことが今では全世界の皆様に公開されるようになっているんだからこりゃ参ります。しかし考えようによっては、こうしてパロディー的にこんなWebアプリが公開されているということはもうすでに核戦争の時代は終わって、これから先はこんなことが起きようがなくて、過去の産物としてみんなでいろいろ考えましょうね...というメッセージにも感じられなくないです。<br />　といいつつも、私自身いろんな都市を検索して、結構たくさん爆弾落としてしまいました。たぶんこれを読んだ皆様も結構落とすんじゃないですかね。。。。<br /><br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>tumblrにポストをPerlで</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/perl/perlwwwtumblr.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1116</id>

    <published>2010-07-11T05:44:48Z</published>
    <updated>2010-07-11T16:09:39Z</updated>

    <summary>　TumblrのAPIで自動的に投稿できるものを作ろうと思ったのだけどPHPのサ...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="APIいろいろ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Engine &amp; Object" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　TumblrのAPIで自動的に投稿できるものを作ろうと思ったのだけどPHPのサンプルはたくさんあるのにPerlのはあんまりない。と思っていたらすでに<a href="http://search.cpan.org/%7Edamog/WWW-Tumblr-3/lib/WWW/Tumblr.pm">WWW::Tumblrモジュール</a>なんていうのがあるんですね。特に自分で書く必要もなかったという感じで...。CPANからモジュールをインストールする方法は<a href="http://omnioo.com/omnioolab/perl/perlcpan.php">こちら</a>。<br />cpan[1]&gt; install -y WWW<br />cpan[2]&gt; install WWW::Tumblr<br />こんな感じでOKです。<br /><a href="http://www.tumblr.com/docs/en/api#editing_posts">tumblr APIに関する原文</a>はこちらですが、Perlのことについては何も書いていないと思います。<br /><br />　これ入れてしまったら後は非常に楽です。というか殆ど書くことないです。このサンプルではtextとphotoだけのアップロードですが、他にもいろんなメディアがアップできるはずです。以下を参考にするとよいです。<br /><ul><li><a href="http://www.tumblr.com/docs/en/api">Tumblr API (English)</a></li><li><a href="http://d.hatena.ne.jp/coro_1729/20100217/1266485351">Tumblr API (日本語訳)</a>　計算因難ニッキのcoro_1729さんの和訳</li></ul><br /><blockquote>#!/usr/bin/perl<br /><br />use WWW::Tumblr;<br />use strict;<br /><br />my $tumblr = WWW::Tumblr-&gt;new;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />$tumblr-&gt;email('user@omnioo.com');<br />$tumblr-&gt;password('userspassword');<br /><br />my $res = $tumblr-&gt;write(<br />&nbsp;&nbsp;&nbsp; # Regular text<br />&nbsp;&nbsp;&nbsp; type =&gt; 'regular',<br />&nbsp;&nbsp;&nbsp; title =&gt; 'PerlからもAPIで投稿できますね。',<br />&nbsp;&nbsp;&nbsp; body =&gt; 'PerlからもAPIで投稿できますね。しかしなんでこんなに投稿して反映されるまでのタイムラグがあるんでしょうか。',<br /><br />&nbsp;&nbsp;&nbsp; # Photo<br />&nbsp;&nbsp;&nbsp; #type =&gt; 'photo',<br />&nbsp;&nbsp;&nbsp; #data =&gt; './001.jpg',<br />&nbsp;&nbsp;&nbsp; #caption =&gt; '001.jpg',<br />);<br /><br />print "Content-type: text/html\n\n";<br />if ($res) {<br />&nbsp;&nbsp;&nbsp; print "It has done for writing.";<br />} else {<br />&nbsp;&nbsp;&nbsp; print "Failer !";<br />}<br />exit;<br /></blockquote>]]>
        
    </content>
</entry>

<entry>
    <title>MT PluginのHello World !</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/movable-type/mt-pluginhello-world.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1115</id>

    <published>2010-07-10T16:30:55Z</published>
    <updated>2010-07-10T17:27:48Z</updated>

    <summary>　MTプラグインの最も簡単な実際的な作成方法を紹介します。ここではやはりHell...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Plugin" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="perl" label="Perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="plugin" label="plugin" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　MTプラグインの最も簡単な実際的な作成方法を紹介します。ここではやはりHello World!をMTタグでもって出力する方法です。MTタグはすでに豊富なタグが用意されていますが、オリジナルのMTタグを作成することができます。例えば画像の表示機能をもっと簡単に充実させたい場合は既存のMTタグを越えてオリジナルのタグの作成ができます。しかし、ここでは最も基礎的な書き方から勉強してゆきます。<br /><br />


<h1>Hello World! プラグインを作る</h1>　ここではオリジナルのMTタグ<span class="mt-tag">&lt;$MTHello$&gt;でもってHello World!を表示できるようなプラグインを作成します。これは実に用途の考えにくいMTタグですが、実際には&lt;$Copy$&gt;などでごく頻繁に使用するコピーライトを表示させたりすることに応用できると思います。<br />　すでにプラグインの作成方法を<a href="http://omnioo.com/omnioolab/movable-type/movable-type-plugin-2.php">開発基礎（その２）</a>までを勉強していることを前提としてここではコード内容を全部書いてみます。短いのでわかりやすいです。</span><br /><ul><li><a href="http://www.omnioo.com/omnioolab/upload/files/hello_world.zip">Hello World Plugin Download</a></li></ul><blockquote>package MT::Plugin::HelloWorld;&nbsp;&nbsp; &nbsp;#パッケージ名の指定<br /><br />use strict;<br />use base qw( MT::Plugin);<br />my $plugin = MT::Plugin::HelloWorld-&gt;new({<br />&nbsp;&nbsp; &nbsp;id&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;=&gt;&nbsp;&nbsp; &nbsp;'helloworld',&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;# パッケージのID<br />&nbsp;&nbsp; &nbsp;key&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;=&gt;&nbsp;&nbsp; &nbsp;'__PACKAGE__',&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;# だいたいいつも同じ<br />&nbsp;&nbsp; &nbsp;name&nbsp;&nbsp; &nbsp;=&gt;&nbsp;&nbsp; &nbsp;'HelloWorld',&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;# パッケージ名<br /><br />&nbsp;&nbsp; &nbsp;registry =&gt; {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tags =&gt; {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;function =&gt; {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;'Hello' =&gt; \&amp;hdlr_hello,<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;}<br />});<br /><br />MT-&gt;add_plugin($plugin);<br /><br />sub hdlr_hello {<br />&nbsp;&nbsp; &nbsp;return 'Hello World !';<br />}<br /><br /># Return<br />1;</blockquote> 1. まずは、パッケージの宣言をします。HelloWorldというパッケージ名にしています。この先のIDの振り方、keyの設定（だいたいいつも同じ）、パッケージ名の設定は前回説明したので割愛。<span class="mt-tag"><a href="http://omnioo.com/omnioolab/movable-type/movable-type-plugin-2.php">開発基礎（その２）</a>を参照のこと。</span><br /><blockquote>package MT::Plugin::HelloWorld;&nbsp;&nbsp; &nbsp;#パッケージ名の指定<br />
use strict;<br />
use base qw( MT::Plugin);<br />
my $plugin = MT::Plugin::HelloWorld-&gt;new({<br />
&nbsp;&nbsp; &nbsp;id&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;=&gt;&nbsp;&nbsp; &nbsp;'helloworld',&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;# パッケージのID<br />
&nbsp;&nbsp; &nbsp;key&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;=&gt;&nbsp;&nbsp; &nbsp;'__PACKAGE__',&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;# だいたいいつも同じ<br />
&nbsp;&nbsp; &nbsp;name&nbsp;&nbsp; &nbsp;=&gt;&nbsp;&nbsp; &nbsp;'HelloWorld',&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;# パッケージ名<br /><br /></blockquote>2. ここから先が新しい部分です。<br /><blockquote>registry =&gt; {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tags =&gt; {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;function =&gt; {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;'Hello' =&gt; \&amp;hdlr_hello,<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;}<br /></blockquote>これはID、key、nameと同じレベルでの設定でありまして、これらのパッケージが何をするのかという機能を登録する(registry =&gt; {)部分です。登録する機能はMTタグなので、tags=&gt; {で登録します。しかし登録したい機能をここで直接指定はしません。ここではfunction（関数、Perlの言い方ではサブルーチン）として記述するわけです。<br />　その関数の内容は、'Hello'というもの、つまり&lt;$MT<b>Hello</b>$&gt;というタグを登録したいという風にします。余談ですが、この'Hello'の記述でもって実際に使用できるMTタグは、<br /><blockquote>&lt;$MTHello$&gt;<br />&lt;$mt:hello$&gt;<br />&lt;$mt:Hello$&gt;<br /></blockquote>という風に可能です。自分がわかりやすいタグを使用するとよいです。<br />　この'Hello'という記述は\&amp;hdlr_hello,という機能をもっていますよ！という風に指示を与えてやります。ここまででタグの登録が終わりました。括弧の付け方に注意してください。ちょっと複雑な入れ子になっていますので。<br />　また\&amp;hdlr_helloの部分の<b>\&amp;hdlr_</b>hello,は現在のところ殆ど定形で構いません。それは次のサブルーチンの部分で共通であれば大丈夫です。<br /><br />3. \&amp;hdlr_hello,というのは、Perlのサブルーチン（関数）を表しています。Perlを普段から使っている方にはわかりやすいものですが、PHPやJavascriptに慣れているとちょっと不自然な気がします。/&amp;という見慣れない記号はfunctionという意味と同義です。Perlではこういうちょっと分かり辛い記号を使います。この関数の中身は、<br /><blockquote>sub <b>hdlr_</b>hello {<br />
&nbsp;&nbsp; &nbsp;return 'Hello World !';<br />
}<br /></blockquote>という風に表現されています。先ほど指定したサブルーチンの実際の中身が表記されていて、<b>hdlr_</b>helloと記述しています。ここではタグが返す文字列はHello World!という単純な文字列なのでreturnに'Hello World !'を指定します。これで殆ど完成です。<br />　自分でいろいろと文字列を変えて実験してみてください。<br /><br />　<br />]]>
        
    </content>
</entry>

<entry>
    <title>iPhoneアプリのアイコンを作る</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/iphone/iphone-4.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1114</id>

    <published>2010-07-09T14:00:45Z</published>
    <updated>2010-07-09T14:27:15Z</updated>

    <summary>　さて、Hello World!ができたところですが、シュミレーターでアプリを起...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="Develop" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="iPhone" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="iphone" label="iPhone" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　さて、Hello World!ができたところですが、シュミレーターでアプリを起動させてみるとそのアプリ自体はただの真っ白な四角いアプリアイコンになっています。これではちょっと味気ないのでここではiPhoneアプリのアイコンの作り方を勉強します。といっても非常に簡単です。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon-597.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon-597.php','popup','width=57,height=57,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon-thumb-57x57-597.png" alt="hw-icon.png" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="57" width="57" /></a>　まず、57x57(px)のpng画像を作ります。これはPhotoshopなどのソフトを使って自分で作ってみてください。もし自分で作ることができなかったらグラフィック仕事の得意な友人に作ってもらうように頼みましょう。ここではHello Worldという文字の入った茶色のアイコンを作成します。<br /><br />まずはXcodeを立ち上げてください。今度は立ち上げた後に新規のプロジェクトを作成しないで先ほど作成したHello Worldプロジェクトを立ち上げます。<br />　それから左側のファイルメニューの中から「Resources」フォルダーを選びます。その中に、<br /><blockquote>helloworld-info.plist<br /></blockquote>というファイルがあるのを見つけてください。このファイルをワンクリックすると以下のような画面になると思います。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon-1-600.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon-1-600.php','popup','width=982,height=746,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon-1-thumb-500x379-600.jpg" alt="hw-icon-1.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="379" width="500" /></a><a href="http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon57_57-604.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon57_57-604.php','popup','width=400,height=374,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/hw-icon57_57-thumb-150x140-604.jpg" alt="hw-icon57_57.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="140" width="150" /></a>　中身はいろいろなプロパティー（設定）をしているファイルであることがわかると思います。このファイルの「Icon file」という部分の設定が空白になっているはずです。<br /><br />　先ほど作成したアイコン画像をXcode内に登録するには、その画像をドラッグして「Resources」フォルダにドロップしてください。画像の追加を確認(設定）する画面が出ますのでそのまま「追加」ボタンを押します。これでアイコンにする画像の追加ができました。<br />&nbsp;それから、先程のhelloworld-info.plistファイルのアイコン設定欄に追加した画像ファイル名を書き込みます。ここではhw-iicon.pngというファイル名にしたのでその名称を書き込みます。<br />　最後に保存してビルドしてください。これでアイコンの出来上がりです。<br /><br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/iPhoneApps-icon-607.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/iPhoneApps-icon-607.php','popup','width=318,height=199,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/iPhoneApps-icon-thumb-200x125-607.jpg" alt="iPhoneApps-icon.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="125" width="200" /></a>　　iPhoneアプリ特有の角丸とガラスのような鏡面仕上の反射は自動的に行ってくれます。<br /><br /><br /><br /> <div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>iPhoneでHello world!</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/iphone/iphonehello-world.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1113</id>

    <published>2010-07-08T14:02:40Z</published>
    <updated>2010-07-09T14:34:55Z</updated>

    <summary>　Hello world!をいったい人生のうちで何回体験することになるのか......</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="Develop" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="iPhone" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　Hello world!をいったい人生のうちで何回体験することになるのか...ということにうんざりしている皆様。iPhoneでも残念ながらHello worldでした。たぶん例としてあげる変数の値も="hogehoge"になること間違いなしです。<br />　ここでは初めての文字表示方法をかなり簡単に説明します。実際、こんなやり方じゃテキストなんて表示できない！と思うかもしれませんが、最初なので仕方がありません。誰にでも初めがあるのです。<br /><br />1. まずXcodeを立ち上げます。立ち上げると、プロジェクトの選択を迫られるので「新規Xcodeプロジェクトを作成」を選択します。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/xcode-newproject-564.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/xcode-newproject-564.php','popup','width=802,height=524,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/xcode-newproject-thumb-500x326-564.jpg" alt="xcode-newproject.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="326" width="500" /></a>2. 新規プロジェクトのテンプレートを選択：画面になります。アプリを作る際にベースになるテンプレートを既に用意してくれているというかなり親切なフレームワークです。後々様々なテンプレートを選択して開発の効率化をねらいますが、初心者は常に「View-based Application」を選びましょう。それ以外のことは考えなくてもいいです。<br />　それから中程にあるProductのプルダウン選択では、iPhoneとiPadが選択できますが、ここではiPhoneを選択します。最後に「選択」ボタンを押して次に進むとプロジェクト名とそのプロジェクトの保存先を聞いてきます。ここではhelloworldというプロジェクト名にして適当な場所に保存してください。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/xcode-template-567.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/xcode-template-567.php','popup','width=733,height=596,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/xcode-template-thumb-500x406-567.jpg" alt="xcode-template.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="406" width="500" /></a>3. 立ち上がった画面ではすでに様々なデフォルトのファイルが準備されています。それぞれ機能的にはまっさらな状態のファイルですが、そのファイルの関係はお互いにインポートされていたり呼び出されていたり内部でつながっていたりといろいろやってくれています。詳細で鬱陶しい作業をすべて自動化してくれているというわけです。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/xcode-open-570.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/xcode-open-570.php','popup','width=976,height=550,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/xcode-open-thumb-500x281-570.jpg" alt="xcode-open.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="281" width="500" /></a>4. 次に左メニューのResourcesディレクトリからhellowworldViewController.xibファイルをダブルクリックします。<br />　このファイルは、その名の通り、このプロジェクト（アプリ）の最も表面に近いインターフェイス（ViewController)を設定するファイルです。ファイルはファイルなのですが、このファイルはこれまた便利なことにinterfacebilderというフレームワークと連動しています。つまりインターフェイスだかViewContorollerだかという違った言葉で同じ意味のような...つまり我々が使っているiPhoneのガラス面直下の部分のデザインを作り上げるという作業なのです。実際その場所にHello world!を表示するわけです。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/helloworld-xib-573.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/helloworld-xib-573.php','popup','width=975,height=546,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/helloworld-xib-thumb-500x280-573.jpg" alt="helloworld-xib.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="280" width="500" /></a>5. この&lt;プロジェクト名&gt;ViewController.xibというファイルをダブルクリックすると、Viewという画面と&lt;プロジェクト名&gt;ViewController.xibという二つの画面が出てくることと思います。そしてここではすでにXcodeからInterface Builderというソフトに遷移しています。感触としてはPhotoshopからPremierとか、WordからPowerpointへ...みたいな感触です。XcodeとInterface Builderもそういうような関係です。<br />　さて、ここでは&lt;プロジェクト名&gt;ViewController.xibという画面は無視してください。この画面は実際のxibファイルをわかりやすく実体化したものというだけで、ここでは使いません。注目はViewの画面です。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/helloworldview-576.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/helloworldview-576.php','popup','width=320,height=502,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/helloworldview-thumb-200x313-576.jpg" alt="helloworldview.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="313" width="200" /></a>6. Viewの画面を選択しておいたまま、メニューバーにある「Tools」→「Inspector」を選択します。このInspectorは非常によく使いますので、いずれ体に染み付いてくることでしょう。また、同時に「Tools」→「Library」も表示させておきます。これも頻繁に使います。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/library-579.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/library-579.php','popup','width=304,height=773,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/library-thumb-150x381-579.jpg" alt="library.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="381" width="150" /></a><a href="http://omnioo.com/omnioolab/assets_c/2010/07/inspector-582.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/inspector-582.php','popup','width=287,height=791,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/inspector-thumb-150x413-582.jpg" alt="inspector.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="413" width="150" /></a><br /><br clear="both" />



7. Library画面の一番上部にある３つの選択肢（iPhone的にはセグメントコントローラーというらしいです。）の「Objects」を選択します。それからスクロールバーをたぐってゆくとLabelなるものを発見すると思います。このコントロールパーツ（iPhone的にはObject）が文字を表示させるオブジェクトになります。このラベル（Label）をドラッグして、Viewの画面のど真ん中まで引っ張ってやります。そしてドロップ（落っことす）するとめでたく「Label」という文字が表示されます。<br />　表示する文字は実際のオブジェクトにマウスを当てて入力してもいいですし、先ほど開いたInSpectorから上部のTextの入力フォームから入力することもできます。ここでは約束どおり、Hello World!と入力します。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/hekkoworld-view-set-585.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/hekkoworld-view-set-585.php','popup','width=320,height=501,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/hekkoworld-view-set-thumb-200x313-585.jpg" alt="hekkoworld-view-set.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="313" width="200" /></a> 　　ここでちょっと説明ですが、Libraryでは、iPhone的にはオブジェクト（インタフェイスのデフォルトの部品）の選択やオブジェクトクラスの選択などインターフェイスのその部品（オブジェクト）とその関係項を設定するコーナーです。Inspectorはそのオブジェクト部品の属性（プロパティー）を設定する部分です。といわれてもよくわからない場合は適当に読んでおいてください。<br /><br />8. ここまで終えたら、FileメニューからSaveを選択して構築したインターフェイス（といってもタダの文字列ですが...）を保存します。（ここではInterface Builderに保存されているだけでXcodeには保存されていません。）<br />　それからXcodeに戻ります。ただいま保存したView（インターフェイス）をXcodeに組み込んでアプリとして機能するようにします。説明は面倒臭い感じですが、方法は簡単でいわゆるビルドというのを一発で行います。「ビルドと実行」というボタンを押すだけです。<br />　「実行可能ファイルを中止」という画面が出るかもしれませんが、構わずOKを押します。そうすると自動的にシュミレーターが立ち上がって先ほどの文字列「Hello World!」がiPhine画面に表示されます。これで完了です。<br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/build-588.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/build-588.php','popup','width=698,height=559,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/build-thumb-400x320-588.jpg" alt="build.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="320" width="400" /></a><br /><a href="http://omnioo.com/omnioolab/assets_c/2010/07/hw-iphone-591.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/hw-iphone-591.php','popup','width=374,height=717,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/hw-iphone-thumb-200x383-591.gif" alt="hw-iphone.gif" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="383" width="200" /></a><br />

<h1>まとめ</h1><a href="http://omnioo.com/omnioolab/assets_c/2010/07/map-594.php" onclick="window.open('http://omnioo.com/omnioolab/assets_c/2010/07/map-594.php','popup','width=500,height=443,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://omnioo.com/omnioolab/assets_c/2010/07/map-thumb-300x265-594.jpg" alt="map.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="265" width="300" /></a>&nbsp;
ここでは実に3つのソフトを使っています。Xcode、Interface Builder、iPhoneシュミレーターです。これらの関係は図のようになっているわけですが、文字列を表示するだけなのにこんな３つのソフトを使う必要があるのです。しかしこれだけ複雑な機能を持つiPhoneのアプリをこんなに簡単に作成してくれるフレームワークはなんとすばらしいことだ！と、むかしながらのコテコテのプログラマーは喜びます。<br />　一連の動作を概念的にまとめてみると、<br /><ol><li>プロジェクトを立ち上げてアプリ開発に必要な関係ファイルをすべて構築します。これでアプリの原型（テンプレート）を作成しています。Xcodeを使ってこの作業は（自動的に）行われます。</li><li>xibファイルを使ってアプリのインターフェイス（操作部分...つまりiPhone的にはオブジェクト）を作成して最も表面的な部分の画面を作ります。この作成に使用するのがInterface Builderです。</li><li>これらのインタフェイスの設定を保存してXcodeに混ぜ合わせます。混ぜ合わせる作業がビルドといわれる作業です。ビルドするとiPhoneアプリとして作動する準備が整います。</li><li>これをシュミレーターを使って動作の確認をします。無事作動していたら成功です。</li></ol>]]>
        
    </content>
</entry>

<entry>
    <title>tumblrのAPIからいろいろ読み込む</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/api/tumblrapi-1.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1108</id>

    <published>2010-07-08T02:55:23Z</published>
    <updated>2010-07-08T13:51:21Z</updated>

    <summary>　tumblrは予想以上におもしろいです。tumblrな人々が書く内容もさること...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="APIいろいろ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Engine &amp; Object" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　tumblrは予想以上におもしろいです。tumblrな人々が書く内容もさることながら現在現存する主なメディアは殆ど投稿することができる上におもしろい記事が自然に手元にあがってくるという不思議な感触のソシャルメディアです。<br />　ここでは読み込みに絞ってAPIを利用して様々な投稿メディアを引っぱってくる勉強をします。勉強といってもxmlを読み込みだけなので特に勉強でもないんですが、その構成といいますか中身を見ていきたいと思います。<br /><br />　XMLのよく使う部分だけ抜き出してみると、こんな風になってます。<br /><blockquote>&lt;tumblr&gt;<br /><blockquote>&nbsp;&nbsp;&nbsp; &lt;tumblelog&gt;<br /><br /><blockquote>&nbsp;&nbsp;&nbsp; &lt;posts&gt;<br /><br /><blockquote>&nbsp;&nbsp;&nbsp; &lt;post (url)&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;regular-title&gt;ブログタイトル&lt;/regular-title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;regular-body&gt;ブログテキスト&lt;/regular-body&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/post&gt;<br /></blockquote>&nbsp;&nbsp; <br /><blockquote>&nbsp;&nbsp;&nbsp; &lt;post (url)&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;quote-text&gt;引用テキスト&lt;/quote-text&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;quote-source&gt;引用テキストの出典元&lt;/quote-source&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/post&gt;<br /></blockquote>&nbsp;&nbsp; <br /><blockquote>&nbsp;&nbsp;&nbsp; &lt;post (url)&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;photo-url max-width="1280"&gt;画像URL&lt;/photo-url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;photo-url max-width="500"&gt;画像URL&lt;/photo-url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;photo-url max-width="250"&gt;画像URL&lt;/photo-url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;photo-url max-width="100"&gt;画像URL&lt;/photo-url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;photo-url max-width="75"&gt;画像URL&lt;/photo-url&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/post&gt;<br /></blockquote>&nbsp;&nbsp; <br /><blockquote>&nbsp;&nbsp;&nbsp; &lt;post (url)&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link-text&gt;リンク先のタイトル&lt;/link-text&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link-url&gt;リンクのURL&lt;/link-url&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/post&gt;<br /></blockquote><br />&lt;posts&gt;<br /></blockquote><br />&nbsp;&nbsp;&nbsp; &lt;/tumblelog&gt;<br /></blockquote>&lt;/tumblr&gt;<br /></blockquote>　ここではよく使うテキスト、引用（リブログ）、画像、リンクに絞りました。ここら辺りがよく使う部分です。ブログの記事一つのブロックが&lt;post&gt;&lt;/post&gt;で、その中に各メディアが格納されている感じになっています。<br /><br /><ul><li><a href="http://omnioo.com/omnioolab/upload/sample_script/php/tumblr/xml_read_quote.php">Sample Demo</a></li></ul> ]]>
        
    </content>
</entry>

<entry>
    <title>MySQLのアップデートができない問題</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/mysql/mysql-9.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1111</id>

    <published>2010-07-04T14:11:43Z</published>
    <updated>2010-07-04T14:13:47Z</updated>

    <summary>　mysqlで気をつけないといけないことがありました。あまり多くお目にかかる問題...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="MySQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="管理・権限" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="troble" label="Troble" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　mysqlで気をつけないといけないことがありました。あまり多くお目にかかる問題ではないと思いますが、mysqlのアップデート時にどうしても更新ができないわけなのです。数週間放っておいて（もしアップデートのソース自体のバグだったら数日後には解消されているだろうという楽観的な考えでもって）何とかなるでしょうぐらいに思っていたのだけど、全然どうにもなっていない。しかも世間で全く騒いでいない様子であり、どうやら自分のサーバーだけの話になっている...んですね。さすがにアップデート一度サボるとその後がホントに面倒なことになるので、原因を追求。<br />　 MySQLのハックについては殆ど素人同然の自分でありまして、基本的な使い方ができるぐらい...という感じであってどこに何のファイルがどんな感じでおいてあるのすらもわからないわけです。とにかく/var/log辺りに何かエラーログでもあるんだろう...と探してみるとやはりMySQLログのディレクトリがある。喜び勇んで開いてみると空！なぜ。どうやらログを取るような設定にしていないらしい。何かのマニュアルを読んで設定したのだけど、たぶん基本的な設定のみで特にログの記録なんていうものはすっ飛ばしていたのだろう。<br />　そんなわけでsyslog辺りを探るわけですが、ありました、ありましたよ。ちょうどその時刻にばっちりエラー出てるんです。<br /><blockquote>Jul&nbsp; 3 22:21:04 myhost /etc/mysql/debian-start[1596]: /usr/bin/mysqlcheck: Got error: 1045: Access denied for user 'debian-sys-maint'@'localhost' (using password: YES) when trying to connect<br />Jul&nbsp; 3 22:21:04 myhost /etc/mysql/debian-start[1596]: FATAL ERROR: Upgrade failed<br /></blockquote>...わからない...。<br /><br />　調べてみるとMySQLにスクリプトがログインする際に登録されているものを使うとログインできません！というエラーメッセージらしいのです。そのMySQLにログインしたがっているスクリプトというのが、debian-sys-maintさんという方です。彼は/etc/mysql/debian.cnfというファイルにパスワードを聞きにいってからログインしようとするのですが、どうやらそれができない...ということ。<br />　debian-sys-maintさんのパスワードをちゃんと一致させておくとこういうエラーは起こらないです。<br /><br /><blockquote>$ sudo grep password /etc/mysql/debian.cnf<br />password =&nbsp; &lt;debian-sys-maintさんのパスワード&gt;<br />$ mysql -u root -p<br />Enter password: &lt; MYSQLのそのユーザーのパスワード&gt;<br />...中略...<br />mysql&gt; set password for 'debian-sys-maint'@'localhost'=password('&lt;さっきのdebian-sys-maintさんのパスワード&gt;');<br />Query OK, 0 rows affected (0.00 sec)<br /></blockquote><br />これで治った！ ]]>
        
    </content>
</entry>

<entry>
    <title>RGBの値を16進数に変換</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/php/rgb16.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1109</id>

    <published>2010-07-02T17:15:23Z</published>
    <updated>2010-07-02T17:20:29Z</updated>

    <summary>　かつてのPhotoshopにはRGBとCMYKの値を設定して色を作り出していた...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="関数" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="skill" label="Skill" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　かつてのPhotoshopにはRGBとCMYKの値を設定して色を作り出していたのですが、最近では16進数を使って色を作ることが多いです。というのもWebページの中では16進数の方が使いやすい構造になっているからです。<br />　そんなわけでRGBの0から255までの値をWebに特化した16進数になるようにするプログラムです。<br /><blockquote>&lt;?php<br clear="none" />//&nbsp; RGBを16進数に変換<br clear="none" />$red = rand(0,255);<br clear="none" />$green = rand(0,255);<br clear="none" />$blue = rand(0,255);<br clear="none" /><br clear="none" />$color16 = change16_color($red, $green, $blue);<br clear="none" />print "&lt;div style='background-color:".$color16."'&gt;これだ！&lt;/div&gt;";<br clear="none" /><br clear="none" />function change16_color ($red,$green,$blue) {<br clear="none" /><br clear="none" />&nbsp;&nbsp; &nbsp;#&nbsp; 16進数にそれぞれ変換<br clear="none" />&nbsp;&nbsp; &nbsp;<b>$red = dechex($red);</b><br clear="none" /><b>&nbsp;&nbsp; &nbsp;$green = dechex($green);</b><br clear="none" /><b>&nbsp;&nbsp; &nbsp;$blue = dechex($blue);</b><br clear="none" />&nbsp;&nbsp; &nbsp;<br clear="none" />&nbsp;&nbsp; &nbsp;if (strlen($red) == 1) { $red = $red.$red; }<br clear="none" />&nbsp;&nbsp; &nbsp;if (strlen($green) == 1) { $green = $green.$green; }<br clear="none" />&nbsp;&nbsp; &nbsp;if (strlen($blue) == 1) { $blue = $blue.$blue; }<br clear="none" />&nbsp;&nbsp; &nbsp;<br clear="none" />&nbsp;&nbsp; &nbsp;$color16 = '#'."$red$green$blue";<br clear="none" />&nbsp;&nbsp; &nbsp;return $color16;<br clear="none" />&nbsp;&nbsp; &nbsp;<br clear="none" />}<br clear="none" /><br clear="none" />?&gt;<br /></blockquote><br clear="none" />&nbsp;
こんな感じです。dechexという便利な関数がPHPにはありました。]]>
        
    </content>
</entry>

<entry>
    <title>靴について</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/cat391/post-82.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1102</id>

    <published>2010-06-28T15:07:04Z</published>
    <updated>2010-06-29T13:19:52Z</updated>

    <summary>　ここ数年間サンダルのみで過ごしてきました。履き潰したサンダルといえば、無印のサ...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="エッセイ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="芸術・美術・哲学" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[　ここ数年間サンダルのみで過ごしてきました。履き潰したサンダルといえば、無印のサンダル、近所のガレージセールで買ったゴム製380円ぐらいのサンダル、クロックスの偽物多数...といった感じで、まるでまともな靴を履いていなかった数年間でした。殆ど自動車に乗っていたということもあって真冬もサンダルで特に問題はなかったし、実際には実は靴下すらまともに履いたことがないし、長ズボンが嫌いです。そんなわけで足に何か無駄なものがあること自体が嫌いなのですが、この度本当に久しぶりにまともな靴を一足買ってみました。<br />　<a href="http://www.rockport.com/home/index.jsp">RockPort</a>の革のスニーカー。これがまた非常に履き心地がよくてびっくりなのです。自分が現在持っている靴といえば、冠婚葬祭用で結婚式と葬式でしか履かないリーガルの無個性な革靴と、今ではもう絶版になってしまったボーリングシューズとよく間違えられるリーガルのツートンカラーの（自分ではかなりおしゃれだと思っている）革靴と、Milk Barの店長さんから貰ったアディダスのバスケットシューズとクロックスのサンダルの偽物（近所のホームセンターで150円）しかないのです。99％の割合でこの偽物サンダルを愛用しておりました。が、本当の靴をメインの靴にしてみると何だかちょっと違った世界観が生まれ始めました。<br />　要するに私の足元に対する主張は、<br /><div align="center"><font style="font-size: 1.25em;"><b>裸足 or いい靴</b></font><br /><br /></div>なのです。東京では現実的に裸足で歩くのはちょっと危険でありますし、また変人扱いされて無駄な職務質問にいつも答えなければならないハメになるので、できるだけサンダル。そうでなければ「かなりいい靴」を履くべきだと思うわけです。<br />　本日、当初できるだけ安めの普通の靴を買おうと思っていて<a href="http://www.vansjapan.com/">VANS</a>の靴を数点買えばいいだろうと思っていたのですが、VANSははっきり言ってダメです。なぜならこの手の靴は「月星ベンチャー」と殆ど変わらないからです。驚くべきことに「月星ベンチャー」をVANSとして売っているのではないかとちょっと疑いましたが実際は勿論そうではないんでしょうけど、品質としては何一つ変わらん感じです。これは本当にダメです。私がここで言いたいは、月星ベンチャーがダメなのではなくてVANSがダメです。同じような品質でVANSは数千円高い。月星ベンチャーは1000円ぐらいで買えてしまいます。（もっと安いかな。）<br />　車椅子の方々は別として我々は殆ど足を使って行動するわけでして、足なくして知能なしと思われるほど足はその人間の経験や知能に関連すると思うんです。その足に対して悪い靴というのは、その本人の知能を低下させるのと同様のことなんじゃないだろうかと。ここでいう悪い靴というのは、勿論、裸足といい靴の中間に位置するような中途半端な靴のことです。<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Ubuntuでクライアント側からのBasic認証</title>
    <link rel="alternate" type="text/html" href="http://omnioo.com/omnioolab/ubuntu-910/ubuntubasic.php" />
    <id>tag:omnioo.com,2010:/omnioolab//31.1107</id>

    <published>2010-06-28T14:19:25Z</published>
    <updated>2010-06-30T14:39:40Z</updated>

    <summary>Basic認証をクライアント側から使えるようにする 　クライアント側からBasi...</summary>
    <author>
        <name>omnioo</name>
        
    </author>
    
        <category term="Server" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Ubuntu 9.10" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Server" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="skill" label="Skill" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://omnioo.com/omnioolab/">
        <![CDATA[<h1>Basic認証をクライアント側から使えるようにする</h1>
　クライアント側からBasic認証を設定するのは結構簡単。その前にApache2側で.htaccessファイルと.htpasswdファイルがWebサーバー内で使えるようにしておかなくてはなりません。<br />　UbuntuのApache2ですと、apache2.conf内に以下の記述がないとダメです。<br /><blockquote>AccessFileName .htaccess<br /></blockquote><blockquote>&lt;Files ~ "^\.ht"&gt;<br />&nbsp;&nbsp;&nbsp; Order allow,deny<br />&nbsp;&nbsp;&nbsp; Deny from all<br />&lt;/Files&gt;<br /></blockquote>　まずはアクセスファイルのファイル名が.htaccessという名前であることを記述します。セキュリティー上他のファイル名にすることもできますが、.(ドット)をつけて隠しファイルにしましょう。次にパスワードファイルなどの.htpasswdが読み込めるようにします。デフォルトでは.htではじまるファイル名ということになっていて特に.htpasswdである必要はありません。慣例上、.htaccessと.htpasswdということになっているだけです。<br />　この設定がなかったら追加しておきます。（たぶんデフォルトでこんな風になっている筈です。）<br />　次にすべてのユーザーに.htaccessと.htpasswdの使用を可能にさせるには、usrdir.confに以下の記述をしてください。<br /><blockquote>&lt;Directory /home/*/public_html&gt;<br />&nbsp; <b>AllowOverride</b> FileInfo AuthConfig Limit Indexes<br />&nbsp; Options FollowSymLinks MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI<br />&nbsp; &lt;Limit GET POST OPTIONS&gt;<br />&nbsp;&nbsp;&nbsp; Order allow,deny<br />&nbsp;&nbsp;&nbsp; Allow from all<br />&nbsp; &lt;/Limit&gt;<br />&nbsp; &lt;LimitExcept GET POST OPTIONS&gt;<br />&nbsp;&nbsp;&nbsp; Order deny,allow<br />&nbsp;&nbsp;&nbsp; Deny from all<br />&nbsp; &lt;/LimitExcept&gt;<br />&lt;/Directory&gt;<br /></blockquote>　AllowOverrideがその設定です。.htaccessファイルの使用を許可します。この設定が終わったらApache2を再起動させます。<br /># /etc/init.d/apache2 restart<br /><br />

<h1>Basic認証をクライアント側から設定する</h1>　クライアント側からの設定はとても簡単で、<a href="http://www.chama.ne.jp/access/index.htm">ChamaNetさん</a>で詳しく解説してくれている上に暗号化もやってくれます。説明が重複しますが、ここでも。<br />　まず認証ロックをかけたいディレクトリに.htaccessファイルをアップロードします。こうすると、そのディレクトリ以下すべてのディレクトリにロックがかかります。ファイルの中身はこんな風です。<br /><font size="2">AuthUserFile home/public_html/username/userdir/.htpasswd<br />
                  AuthGroupFile /dev/null<br />
                  AuthName "Input ID and Password."<br />
                  AuthType Basic<br />
                  require valid-user<br />
                  &lt;Files ~ "^.(htpasswd|htaccess)$"&gt;<br />
                  deny from all<br />
                  &lt;/Files&gt;<br />　書き直す部分は、一行目の</font><font size="2">home/public_html/username/userdir/.htpasswdで、ここには.htaccessファイルがある場所をサーバーのフルパスで記述します。この場合、httpアクセスして認証機能が作用する場所は、http://xxxxxxx/userdir/ということになります。</font>後は<a href="http://www.chama.ne.jp/access/index.htm">ChamaNetさん</a>で暗号化したファイルと.htpasswdとかして同じディレクトリに放り込んでおけば作動します。ファイルのパーミッションは604か644で大丈夫みたいです。<br /><br />　<br /><br />　 <br />]]>
        
    </content>
</entry>

</feed>
