大学時代の仲間に会った

大学時代の仲間の忘年会に行ってきた。とても楽しかったが、同時に自分の経験やネットワーク、アンテナの貧弱さを思い知らされもした。自分は何をやってきたのだ?と思ってしまう。たぶん、同じ時間だけ生きてきても、「えいやっと腰を上げた力の量」「搾り出した勇気の量」「『自分の』未来について考えてきた時間」が足りてないんだろう。

Webで起こること、できることについて論じた文章をどれだけ読んできたかってことを考えると、たぶん仲間内では自分が一番多いのだろう。しかし、それが仲間に与えうる何かに結びついていない。閉じてる人間を無理やりこじ開けるだけの力はWebにはない。動かない人間にゲタを履かしてくれる力もない。ただ、行動する者をエンパワーするのがWeb。

動かねば。開かねば。

世の中がわかる「○○主義」の基礎知識

世の中に多々ある「○○主義」の簡単な解説と、それらの相対関係をまとめた本。取り扱う「○○主義」の範囲は政治体制(民主主義、立憲主義など)、芸術の表現(ロマン主義ダダイズムなど)など多岐にわたって、その数は90種類以上。まずたくさんの主義をテーマによって分類し、次にそのテーマの中でそれらの関係を整理し、最後にはテーマ内で図にまとめるという構成。

ある主義主張を掘り下げて解説する本はたくさんあるが、それらを俯瞰的に見て配置するための本というのはあまりなかったように思う。読んで頭の中が少し整理された感じ。すぐ忘れるんだろうけど。

ポジティブシンキングについて書いてある部分がおもしろい。

楽観主義は、ネガティヴなことに対しては一時的・特定的・他責的な態度をとり、ポジティヴなことに対しては永久的・包括的・自責的な態度をとることである

論理の普遍性よりも功利性を重視する思想、ということか。それでいいテーマもあるだろうし、それじゃいけないテーマもあるだろう。ポジティブであること=善、という空気があるように感じるが、常にポジティブであろうとすることの負の側面を自覚しておくことも大事だと思う。

なんらかの主義にのめりこむんじゃなくて、それらを自分で組み合わせて濃淡をつけて運用していくのが現実的でベターな解なんだろう。そのためには、いろんな思想の概要と一般的な強みと批判されるポイントをざっと知っておくのは有益だと思った。

章をまたいでいるせいで直接に対比されていないが、強い関連を感じる主義と主義もたくさんあった。この本は十分すっきりまとまっているように感じるが、スマートなまとめ方はまだ他にもいろいろあるんだろう。同じ趣旨で別の人がまとめた本があればそれも読んでみたい。

世の中がわかる「○○主義」の基礎知識 (PHP新書)

世の中がわかる「○○主義」の基礎知識 (PHP新書)

非属の才能

絶望に効くクスリ」の延長として購入。みんなと同じようにできない部分、なじめてない部分を気に病まないで、むしろそのみんなと違う部分を大事にしようよ、という話。スーパースター達がいかにある時期ある側面で異端であったか、またそのことが後の成功にどれだけ貢献したか、という例をたくさん引っ張ってきて、「属さない」ことのすばらしさを説く。

登場する人物達の例が偏っているとは思う。女性と付き合うことを15歳の段階で100%あきらめて自分の好きなことに没頭していた荒俣宏さんが美人スチュワーデスと結婚できた、という例は、ファッションやデートマニュアル的知識が逆効果になることの証明にはならない。統計的にもさほど影響を与えないだろう。

しかし。人に希望を与えるという点においては大いに意味がある。そしてそれこそがこの本の目的であり、一般に信じられていることが統計的に間違っているという本ではない。この本が攻撃対象にしているのは一般に信じられている確率モデルそのものではなく、その確率モデルに思考を縛られてしまい、そこにある希望に気付けずに絶望してしまっている不自由な心だ。何かを為すために成功率60%の方法と50%の方法があるとして、何らかの理由で60%の方法が自分には使えなかったとする。そのとき、みんなが使っている60%の方法が使えないことに絶望して、自分の手の中にある50%の方法を試さずに結果的に0%にしてしまう、それこそがもったいないことだということだと思う。何らかの理由による10%のダウンよりも、そのことについてひねくれて絶望して何もしなくなる50%のダウンの方がずっと問題だ。もちろん、現実には何においてもこんなふうに事前に数値では分からない。でもだからこそ、みんなと同じようにできないことを過少に評価してしまうのだろうと思う。

誰の中にもマイノリティである部分はある。不安に思い、コンプレックスに思い、それゆえに力が出せなくなっている部分はある。絶望に効くクスリ、もしかしたら命を救うクスリがここにある。

不登校は負け犬じゃないし、球技大会で活躍する生徒がヒーローとは限らない。
うまくしゃべれなくていいし、年中、空を見上げていてもいい。
・・・(中略)・・・
デブでもゲイでも、年寄りでも独身でも、ノーメイクでもノイローゼでもいい。
友達がいなくてもいい。最下位でもいい。したいことだけしていてもいい。
「そんなバカなことをわざわざ本にするな!」とお怒りの方もいるだろう。
でも僕は、それで命が救われる人がいると本気で思っている。

非属の才能 (光文社新書)

非属の才能 (光文社新書)

絶望に効くクスリ―ONE ON ONE (Vol.1) (YOUNG SUNDAY COMICS SPECIAL)

絶望に効くクスリ―ONE ON ONE (Vol.1) (YOUNG SUNDAY COMICS SPECIAL)

Ethnaのアクション指定パラメータって合理的

今までEthnaのindex.php?action_update=trueというようなアクション指定パラメータの形式には違和感があった。なんでindex.php?action=updateとかじゃないんだろう?って思ってたけど、この形式がとても便利だということに気が付いた。

index.php?action=updateのような形式だったとすると、フォームには

<form action="index.php">
  <input type="hidden" name="action" value="update" />
  <input type="submit" value="送信" />
</form>

のように、hiddenを使って次のアクションを指定してやる必要があるが、index.php?action_update=trueのような形式だと、

<form action="index.php">
  <input type="submit" name="action_update" value="送信" />
</form>

と、submitボタンのname属性を指定してやるだけでupdateアクションに送信できる。今までずっとhiddenで書くしかないと思ってたけど、こっちの方が簡潔でいいな。

ずらーっとチェックボックス付きのリストが並んでて、「チェックしたものをまとめて変更」と「チェックしたものをまとめて削除」のボタンを2つ配置してそれぞれ別アクションに処理させたいようなときにも効果を発揮。index.php?action=updateとかの形式だと、2つのボタンのうちどっちが押されてフォームが送信されたのかを判断するためには、JavaScriptを使うかAction内での処理の分岐が必要になるが、Ethnaデフォルトの形式だと

  <input type="submit" name="update" value="チェックしたものをまとめて更新" />
  <input type="submit" name="delete" value="チェックしたものをまとめて削除" />

で実行するActionを直接指定できて便利。

Illegal mix of collationsエラーが出ないようにする

MySQLにSELECT文を発行したら、以下のようなエラーが出て失敗した。

Illegal mix of collations (ujis_japanese_ci,IMPLICIT) and
(latin1_swedish_ci,COERCIBLE) for operation '='

ujisのテーブルにlatin1で検索条件指定しても駄目だよ、というエラーのようだ。実際にはSQLEUCで書いているのだが、MySQLは設定によってこちらの文字コードをlatin1だと信じ込んでいるらしい。my.cnfかmysqldの起動パラメータで設定変更してやるか、テーブルに接続後に毎回SQLで設定を変更してやる必要がある。今回は最終的にレンタルサーバーで稼動させるつもりなので、毎回SQLで設定してやる方法を取る。

"SET NAMES ujis"
というSQLを発行してやれば、その接続では以後こちらのリクエストをEUCだと判断してくれるようになる。これを接続後毎回実行させるために、Ethna_DB_ADOdbを継承したクラスを作ってconnectメソッドをオーバーライドした。

<?php
require_once('Ethna/class/DB/Ethna_DB_ADOdb.php');

class PROJECTID_DB_ADOdb extends Ethna_DB_ADOdb
{
    /**
     * オーバーライド
     * 通常の接続処理の後、MySQLの文字コードを設定するSQLを発行する
     *
     */
    function connect() {
        if (!parent::connect()) {
            return false;
        }

        return $this->query('SET NAMES ujis');
    }
}
?>

そして、こちらのクラスをDBクラスとして使うようにControllerに設定。

136行目付近で

  • 'db' => 'Ethna_DB_ADOdb',
  1. 'db' => 'PROJECTID_DB_ADOdb',