トップ 最新 追記

Route 477



2011-05-02

[hiki] Hikiにチェックボックス方式のスパム防止を組み込んでみた

2011年においては、スパム防止機能のないWikiエンジンは使いものにならない。Hikiではデフォルトでベイズフィルタと単語フィルタによるスパム防止機能が使えるが、 個人的にもっとメンテナンスフリーなやつが欲しかったので、

□ I'm human ■ I'm robot

みたいなチェックボックス方式のスパム防止機能を作ってみた。これをオン/オフにしたときだけ書き込めるようになる。

1. プラグインの用意

以下のようなrobothuman.rbというファイルをプラグイン置き場(デフォルトはmisc/plugins/)に作る

add_edit_proc do
  %{
    <div id="robothuman">
      Spam Check:
      <input type="checkbox" name="human"> I'm human
      <input type="checkbox" name="robot" checked> I'm robot
    </div>
  }     
end  

2. hiki/command.rbの編集

ほんとはプラグイン側でスパム判定したかったのだけど、方法が分からなかった(無い?)のでcommand.rbを直接書き換える。

366行目の

     def cmd_save( page, text, md5hex, update_timestamp = true )

の下に一行追加して、

   def cmd_save( page, text, md5hex, update_timestamp = true )
     raise "spam check failed; see the checkboxes" if @params['robot'][0] || (@params['human'][0].nil?)

のようにする

3. プラグインの有効化

管理画面にログインして、プラグインrobothuman.rbを有効にする。

補足

  • 導入したばっかりなので効果は不明
  • 本気でやるならreCAPTCHAだけどさすがに編集がめんどいよね
  • JavaScriptで自動的にオン/オフ状態にするバージョン
add_edit_proc do
  %{
    <div id="robothuman">
      Spam Check:
      <input type="checkbox" name="human" id="im_human"> I'm human
      <input type="checkbox" name="robot" id="im_robot" checked> I'm robot
    </div>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $("#im_human").attr("checked", true);
        $("#im_robot").attr("checked", false);
      });
    </script>
  }   
end  

2011-05-27

[mac] Snow Leopardにした

今夏にはLionが出てしまうわけだけど、Snow Leopardでしか動かないソフトにちらほら出くわすので、3000円払ってSnow Leopardに上げてみた。

B003HGH99O

メリット

  • ディスク容量がちょっと増える
  • Mac App Storeが試せる
  • MacRubyがインストールパッケージで入る
  • Powが動く
  • Chrome11で、ウィンドウを複数のSpacesに配置できなくなったバグが直る

まあ、トータルでいえば3000円くらいの値打ちはまだあったかなと思います。

遭遇した罠

macportsを全部入れ直さないといけない → この機会にhomebrewをメインで使ってみることにした。

とりあえずbrewしてみたもの

  • lv
  • wget
  • git
  • tree
  • vim
  • 処理系いろいろ (gauche + rlwrap, coffee-script, node, scala, clojure, ghc)
    • ghcはバイナリ配布を使う?らしくて速かった
  • SDL, graphviz, postgresql

Visorが動かない → SIMBLとVisorをバージョン上げればOK http://d.hatena.ne.jp/a2c/20090909/1252427926


2011-05-29

[book] WEB+DBのRuby連載が終了しました

もう一ヶ月前のことになりますが、WEB+DB Vol.42は1年間のRuby連載の最終回でした。連載が終わってから、完全に脱力してしまって、報告記事が書けませんでした(笑)。

4774146072

内容は「ブラウザGUI」の話です。「ブラウザを使ってGUIアプリを作る」という(yharaウォッチャーにとっては、いつもの)説明と、 RubyStationの作り直し版としてSpellbookを作った話を書きました。

しかしfladdictさんのやつと名前が被ったりして、非常に残念な…。 まあ僕としては便利に使っているので良しとしましょう。万が一「もっと詳しく聞きたい」という方がいれば別に記事を書きます。

スクリーンショット。

f7337dd0d94eefa98f0de372fd4b78bd.png

3つめのNicoShiftsというのは、最近ニコ生 (ニコニコ生放送) 中毒が高じて作ってしまったツールです。最近放送されたニコニコ生放送のうち、タイムシフトが残っているものだけを 表示してくれます。タグで分類したり、NGワード機能もあったりとか。

22c191be2f780c882e559930712b45e7.png


2011-05-30

[ruby] ruby-dev translationというサイトを立ち上げました

Rubyの開発用メーリングリストは、日本語のruby-devと、英語のruby-coreがあります。 このため英語圏の人から「なんかruby-devでだけやりとりされる重要な情報があるのではないか」という印象を持たれたりして(実際にそうかはともかく)、

ruby-dev translationは、これをコミュニティベースでなんとかできないかという試みです。

といっても、全部のメールを翻訳するのはリソース的に大変だと思うので*1、 英語圏の人がサブジェクトを見て、「これは読みたい」と思ったメールに★が付けられるようになっています。 これによって、需要のあるメールだけを重点的に翻訳できるのではないか、そうなればいいな、という淡い期待を抱いています(弱気)。

英語ができるようになるには、語彙や文法も大事ですが、日常的に英語に触れる機会を作るのが重要です。僕も仕事で英語書いてた期間でだいぶ力が付いた気がします。 というわけで、練習がてらにチャレンジしてもらえると嬉しいです。

c048de66c68f8df73c11909d8686852c.png

翻訳するには

右上の「Sign in with twitter」からログインして、メール画面の「Add translation」を押して下さい。Redmineの生成する定型文とかは、自動で最初から翻訳された状態になります (抜けがあればgithub issuesとかで教えてください)。

ちなみに、本文全体を訳すのは大変だという場合は、件名だけでも訳せるようになっています。 メール一覧画面で、件名が日本語のものは、右に「(edit)」というリンクが出るので、それを押してください。

日本語が読めない人にとって、件名はとても重要な情報なので、件名だけでも翻訳していただけると助かります。 (日本語のままでも、アルファベットだけ拾えばだいたい何のメールか分かるという説もありますが)。

ソースコードについて

githubにあります。Rails3で、Herokuで動いています。 木構造の管理はAncestryというライブラリを使っています。nested setではなく、ancestryカラムに "1/23/66" みたいな文字列 (根から自分までのIDを並べたもの) を保存して、LIKE "1/23/%" とかでsubtreeを検索するというちょっと面白い奴です。 メールの取り込みは、dailyでbladeのをスクレイピングしているという謎仕様。

単なるruby-devリーダとしても、スレッド内のメールを一括して読めたり、リンクやRedmineのチケットタグでも親子関係を判定したりと、bladeよりも若干読みやすくなってるかと思います。 ぜひお気に入りに入れて定期的にチェックしてやって下さい。

FAQ?

メールが文字化けしてる場合は、元のbladeの表示がそもそも文字化けしてる場合が多いです (そうでないときはruby-dev translation側のバグかも知れません)。

*1 一時期ruby-dev summaryというのがあったりしました