PHP勉強会に参加してDjangoで掲示板を作りました

第17回PHP勉強会に参加してきました。会場となったECナビさんのオフィスは、とても綺麗でステキでした。

内容は時間内に各自で掲示板を作ろうというもので、皆さん、EthnaとかSymfonyとかお気に入りのフレームワークで作っていました。僕はというと、後ろのほうで隠れてDjangoで作りました。PHP勉強会なのにごめんなさい、ごめんなさい。

メインロジックはあっという間にできてしまって、HTMLとかスタイルシートが一番時間がかかった気がします(といってもadmin画面のパクリだけど)。実際にコードを書いたのは50行くらいです。本当にシンプルで面白くもなんともないのですが、せっかく作ったので公開することにします。これからDjangoを始めようという方向け。


勉強会の後の懇親会にも参加させてもらいましたが、PHPな方々と交流できて楽しかったです。

Firefox 2.0に移行する際のお勧め設定(中級編)

という記事を ウノウラボ に書きました。

でも、今気づいたんだけど、スクリーンショットを撮る時にブックマークバーを消すのを忘れて、個人情報が漏れちゃってるYO!

どうしよう、イメージアップ週間なのに…

ついに禁煙を始めてから10ヶ月

ついに禁煙を始めてから10ヶ月が経った。

昨年末に禁煙を決意してから、文字通り一本も吸っていない。今では隣でタバコを吸っている人がいても何とも思わなくなったので、もう完全に止められたようだ。結局、喫煙が習慣になっていただけなんだよな、とつくづく思う。人間は習慣の動物であり、同じことを繰り返すことが得意だ。慣れると簡単な作業は無意識のうちにできるようになるし、とことん極めれば人間国宝のように神業的な作業をすることだってできる。それだけに、日頃から慣れ親しんでいるソフトウェアやサービスを別のものに乗り換えてもらうことは難しい。よっぽどのアピールポイントがなければ… 

最近始まった携帯電話のナンバーポータビリティ・サービス、世間で言われているよりも利用する人は少ないのではないかと僕は思っている。何でキャリアを変えないのかと聞くと、「電話番号が変わるから」と答えていた人達が前はけっこういた。でも、本当の理由はもっと別のところにあるんじゃないのかな。

というわけで、今週は「イメージアップ週間」&「素直に表現する週間」です。

関連エントリ

feed meterランキング

feed meter は、最近ランキングの集計アルゴリズムが変わったみたい。ウノウ関係もちらほらと…

86. 映画生活ニュース
136. ウノウラボ Unoh Labs
138. よくきたblog
146. suadd blog
271. Weboo! Returns. - Blog

明日から、はてなUSAに出張オフィスをする進太郎さんのsuadd blogは要注目。

Rubyでマルチバイト文字列からnバイト切り出し

すぐに忘れそうなのでメモ。

例えば、11バイト切り出したい時は、次のようにします($KCODE="EUC"の場合)。

s = "かとうあいうえお"
p s[0,11].slice(/\A.{0,}/m)

これの実行結果は、

かとうあい

となって、ちゃんとマルチバイト文字の途中で切れることはありません。

頼まれ事をうまく断る「やだあきこ」

〜 ゲストブロガー第2回 〜

こんにちわ。昨日は、人に頼みごとをする際の注意点を書きました。思ったよりも多くの方から、好評な反応を頂きとても嬉しく思っています。さて、今日は逆の立場で人から頼まれごとをされた際に、どうやって断れば良いのかについて書きます。

頭の回転の速い人は、既にタイトルから想像されていると思います。
はい、そうです。声に出して言ってみましょう!

「そんなの、やだあきこ!」


ブー、0点。これはとても悪い例です。きちんと筋の通った理由もなく、ただ「やだ!」と拒否するなんて、お子ちゃまのすることです。あなたはきちんとした大人ですよね?相手のプライドを傷つける事なしにやんわりと断りつつ、「そっか仕方ないな…」と思ってもらわなければなりません。

さて、そのためにはどうしたら良いでしょうか?ずばり、そんなに都合のよい方法はありません。ただ「できない」と言うのではなくて、きちんとできない理由を相手に説明すべきです。もし、その場ですぐに説明できないのならば、とりあえず「わかりました。」とその場は答えておくこと。そして、後から「よく考えてみたんですけど…」と誠意を持ってできない理由を言えばいいのです。

考えてみてください。好きな女の子に告白して、その場で「ごめんなさい」と言われたら、それはそれはショックですよね。でも、「少し考えさせて」と言われ、時間を置いてから「やっぱりごめんなさい」と言われたほうが、少しは報われる気がしませんか?これと同じで、頼み事をするほうもすぐに「やだ!」とか言われたら、カチンときてしまいます。適切なインターバルを置くことで、初めて「そっか、あいつなりに考えたんだな」と思ってもらえるわけです。

つづく…

人に物を頼む時は「ほしのあき」

~ ゲストブロガー第1回 ~

人に何か頼みごとをする時って、皆さんどうしてますか?
なかなか難しいですよね。人間誰でも命令されることは嫌いなので、頼み方ひとつで結果の質やスピードが変わってくることって、しばしばあります。あなたはどのタイプでしょうか?

「~してください。」
0点。命令口調はダメです。これでは、一部のM系の人を除いて、頼まれたほうの人のモチベーションも下がってしまいます。
「~してもらえますか?」
60点。さっきのよりは、だいぶ良いです。頼まれた人は、まさか「嫌です」と言うわけにはいかないので、実質的には「~してください」と同じなのですが、何となく選択権があるので自主的にやっている感がでます。
「~してほしのあき」
僕はこれですね。最近は、こればっかりです。命令口調では全くないですし、完全に下手に出ているので、頼まれた側も「仕方ない、やってやるか」という感じになります。また、この何とも言えない脱力感がチームの連帯感を強くします。

ただし、注意してください。これを実際に口に出して言ってはいけません。もし、第三者に会話を聞かれていたりすると、言われた側は恥ずかしさから素直な返答をできなくなってしまいます。メール等の文章で依頼する時に限定しましょう。また、相手もちゃんと選びましょう。理解ある人でないと、ただの変な人になってしまいますので。

フレデリック・バック『木を植えた男』

中学生か高校生くらいの時に見た短編アニメーションを突然思い出した。無性に見たくなってYouTubeで探したけど、みつからなかった。今見ても、あの頃のように純粋な気持ちで感動できるだろうか… (9月28日のエントリ)
欲しかったDVDは既に廃盤になっていたんだけど、オークションで中古品が出品されていたのを発見して購入。ワクワクしながら観てみた。

前に観たのは10年以上前なので、さすがに感動する場面や印象に残るシーンは微妙に違うんだけど、一人の人間がひたむきに自然と関わっていく姿に心打たれるのは今も同じ。生きることの意味、本当の幸福の意味について考えさせられるストーリーだった。主人公の友人がポツリと言う「あの老人は幸福でいられる最高の方法を見つけ出したんだ」という台詞が今も心に響いている。きっと、それはお金では買えないし、自分の欲を満たすだけのものではない何かなんだろう。今はまだ分からないけど、自分にもきっとそういうものが見つかるはず。最近、学生時代からの女の子友達の間でちょっとしたベビーブームなんだけど、会うとみんな本当に幸せそうに見える。赤ちゃんは、きっと最高の幸せの一つなんだろうなぁ。

と、ちょっと話がずれたけど、やっぱりフレデリック・バックのアニメーションは自分の好み。こういうのをいっぱい観たいし、いろんな人と共感したいと思う今日この頃。


【2005/10/16追記】
フレデリック・バック作品コレクションというのが発売されているそうです。
2005/4/1発売 240分 ¥11,340(税込)

自然に対する愛情と繊細に溢れた作品を作り続けるアニメーション作家、フレデリック・バックの作品を収録したDVD-BOX。代表作である「木を植えた男」を含む9作品を収録。

Tracで改行をShift+Enterで簡単に入力

TracのWiki記法では、改行はそのままでは反映されません。[[br]]と入力する必要があります。このままでは面倒だということで、Shift+Enterで[[br]]タグが入力されるようなJavaScriptを書きました。

既に OZACC.blog: tracで改行[[br]]を簡単に入力 にてFirefoxで動作するものが公開されていますが、今回はこれを参考にInternet Explorerでも動くようにしました。

設定方法は、htdocs/js/trac.js に以下のコードを追加してください。

function getKeyCode(e){
  return e.keyCode != 0 ? e.keyCode : e.charCode;
}
document.onkeypress = function(e) {
  var flag = false;
  if (navigator.userAgent.indexOf("Firefox") != -1) {
    obj = e.target.tagName.toUpperCase();
    if (obj == 'TEXTAREA' && e.shiftKey && getKeyCode(e) == 13) {
      flag = true;
      elem = document.getElementById(e.target.id);
    }
  } else {
    obj = event.srcElement.tagName.toUpperCase();
    if (obj == 'TEXTAREA' && event.shiftKey && getKeyCode(event) == 13) {
      flag = true;
      elem = document.getElementById(event.srcElement.id);
    }
  }
  if (flag) {
    var insertTag = '[[br]]';
    insertAtCaret(elem, insertTag);
  }
}
function insertAtCaret(obj, text) {
  if(document.selection) {
    obj.focus();
    var orig = obj.value.replace(/\r\n/g, "\n");
    var range = document.selection.createRange();

    if(range.parentElement() != obj) {
      return false;
    }

    range.text = text;

    var actual = tmp = obj.value.replace(/\r\n/g, "\n");

    for(var diff = 0; diff < orig.length; diff++) {
      if(orig.charAt(diff) != actual.charAt(diff)) break;
    }

    for(var index = 0, start = 0;
        tmp.match(text)
          && (tmp = tmp.replace(text, ""))
          && index <= diff;
        index = start + text.length
    ) {
      start = actual.indexOf(text, index);
    }
  } else if(obj.selectionStart) {
    var start = obj.selectionStart;
    var end   = obj.selectionEnd;

    obj.value = obj.value.substr(0, start)
      + text
      + obj.value.substr(end, obj.value.length);
  }

  if(start != null) {
    setCaretTo(obj, start + text.length);
  } else {
    obj.value += text;
  }
}

function setCaretTo(obj, pos) {
  if(obj.createTextRange) {
    var range = obj.createTextRange();
    range.move('character', pos);
    range.select();
  } else if(obj.selectionStart) {
    obj.focus();
    obj.setSelectionRange(pos, pos);
  }
}

もともと社内で利用するために書いたのですが、お蔵入りになりそうで勿体ないので公開します。どうぞご自由に使ってください。

There is no del.icio.us history for this url.

Del.icio.usのURLごとのページが全部

“There is no del.icio.us history for this url.”

とかになってる。うーん、困った…

り・ぼん 〜 My Little Lover


り・ぼん(DVD付) [Single] 〜 My Little Lover
2006/11/8発売 ¥ 1,606(税込)

寝耳に水。エイベックスからシングルが出るの?
最近、My Little Loverを聞きまくっているので絶対買う!

サイボウズによるPython調査報告

サイボウズの山本さんによるPython調査報告が以下のURLで公開されています。

http://cydn.cybozu.co.jp/files/python_survey_at_cydn.html

リリースされたばかりのPython 2.5にも言及していたりして非常に良くまとまっています。なぜかTwistedのところで自分の書いた エントリ が紹介されていました。今のサイボウズはたしかPHPで書かれていたと思うのですが、将来的にPythonで書き直すっていうのもありえない話ではないですね。

山中湖に開発合宿に行って来ました

3連休を利用して、ウノウの仲間とプライベート開発合宿に行って来ました。

場所は山中湖近くのペンションぱうぜ。もちろん無線LAN完備で、ダイニングおよびプレイルームを使わせてもらいました。連休だったので夜中までちびっ子が騒いでいたり、一緒にDSで遊んでしまったりしたのですが、料理がとてもおいしいし、オーナー夫婦の人柄もよくて良い環境でした。

ペンションぱうぜ ぱうぜのなか ぱうぜのマスコット犬 肉 海の幸も
posted from フォト蔵

コーディングに疲れたら山中湖へ。湖には、綺麗な白鳥がたくさんいて気分転換にはぴったり。この白鳥、餌をもらえるので、シベリアに帰らなくなってしまったのだとか。そして、お昼は地元の人達の間で知らない人はいないという「渡辺うどん」へ食べに行きました。ここのうどんが最高においしい!! 強力な“こし”と、ツルツルっとは口の中に入っていかない食感が何ともいえないです。おすすめ。3日間で自分もここにずっと住みたくなってしまったので、白鳥たちの気持ちも分からなくないなぁ。

山中湖と白鳥と富士山と ともだちの目線で 肉玉うどn うどん屋は戦場 渡辺うどn
posted from フォト蔵

ところで、開発合宿の成果ですが、完成度は50%といったところ。実は自分は開発合宿は初めての経験だったので、どうも効率が良くなかった気がします。前もって、ある程度の準備をしておく必要があるということを実感しました。

# 「リリースするまでが開発合宿」らしいので、合宿の日々はまだ続きます。

描画が速くなってSafariライクになったiTerm 0.9

Mac OSX用のターミナルソフトウェア iTerm 0.9 がリリースされました。

さっそくダウンロードして使ってみましたが、だいぶ描画が速くなっているようです。また、Safariっぽい見た目になってカッコいい感じ。しばらく標準ターミナルに浮気していたけど、また戻ってみようかな。

ー 変更点 ー

  • A brand new Safari-like tab look.
  • Growl support.
  • Support for Unsanity's Smart Crash Reporter.
  • Added support for many xterm's window size/position escape sequences.
  • Enhanced stability.
  • Fixes for cmd-click URL selection.
  • Many many bug fixes and GUI enhancements.

the band apart & Daniel Powter


alfred and cavity 〜 the band apart

新しいアルバムが出たので購入。Beautiful Vanityがいい感じ。
ledも入っています。


Daniel Powter

もう一枚は、美容室でかかってた「Bad Day」が気に入ったので。

DoJoで簡単にクロスドメインAjaxを実現

という記事を ラボブログのほう に書きました。何だかところどころ文章が変だけど、それは気にしない方向で。

内容は、JSONPを使って簡単にクロスドメインなAjaxが使えますよ、という話。サービス提供側の対応が必要なのですが、現状でYahoo!, del.cio.us, AmazonなどがJSONPでのリクエストに対応しています。もちろん自分で作る分には、簡単に対応可。

DoJoで簡単にできそうということを教えてくれた Voluntasさん に感謝。

イベント駆動型フレームワーク「Twisted」

名前は聞いたことがあったけどよく分かっていなかったTwisted。おおたにさんの発表を聞いて、実際にスプリントで簡単なプログラムを書いてみたんだけど、少し面白さが分かった気がする。これは、例の秘密のプロジェクトで使えそう。今回のDevCampの一番の成果かも。

以下、おおたにさんの説明から。

  • イベント駆動型ネットワークフレームワーク
  • BitTorrent, iCal WebDAVサーバ, Xen, Zope3
  • 同期型 … 実装は簡単。スレッド大量生成。
  • 非同期型 … 同期管理が大変。1つのスレッドで処理可能(← Twisted)
  • Twisted版DNSの逆引き 一番遅いものが最大待ち時間
  • Webチャット+ Ajaxの場合
    同期型 → 定期的にポーリング、スレッドが必要
    非同期型 → 送信専用接続と受信専用接続、普通のWebサーバじゃむり
  • Python標準ライブラリのasyncoreじゃダメなの?
    → 1つの処理なら充分、複数の接続/プロトコルを扱うと力不足
  • TCP/UDP/Unix Socketなどをサポート
  • ファイルアクセス/DBアクセスも非同期処理できる
  • Linuxならコンソール(標準入出力)も非同期処理
  • Twistedの基本
    Reactor … イベントループ
    Deferred … コールバック関数、エラーバック関数を複数登録
    Factory … オブジェクト生成
    Protocol … 接続中は生存、接続が終わると破棄
  • Unix DaemonやWindows Serviceに簡単にできる

Python使いに開発環境を聞いてみる

uemuraさんがPython Developers Camp参加者の開発環境についてインタビューした結果を写真付きでまとめていて面白い。Vim7ってそんなに凄いのか…

Python DevCamp06夏の写真

かき揚げ丼がヤバすぎw

デブキャン会場 参考書が充実してます 増田さんの墨 ホテルから望む富士山 HP200LX こんな感じ Twistedセッション 静岡名物 丸天 親子丼 かき揚げ丼!
posted from フォト蔵