Railsのビューのrenderメソッドにはブロックが渡せるんですね

Railsで作っているウェブアプリの一部ページにサイドバーを載せたいなと思いました。それでいろいろ調べてたら、ビューのrenderメソッドにブロックが渡せることを知ったので、これを使うことにしました。

環境

書き方

まずサイドバーをあらわす_sidebar.html.hamlを用意します。
_sidebar.html.haml

%aside
  = yield

そしてサイドバーを呼び出したいビュー(ここではsomething.html.haml)を以下のように書きます。
something.html.haml

%article
  %h1 Tシャツ
= render :layout => 'sidebar' do
  %ul
    %li ハイテク
    %li NEO

something.html.hamlのページを開くとこんな感じのHTMLになります。

<article> 
  <h1>Tシャツ</h1> 
</article>
<aside> 
  <ul> 
    <li>ハイテク</li> 
    <li>NEO</li> 
  </ul> 
</aside> 

ソースコードを見る限り、ブロックを渡すときは:partialではなく:layoutでないといけないみたいです。

jQueryでAjax on Kay framework

jQueryの$.ajax()から送ったデータをKayで受け取りレスポンスを返すまでのコードをメモしておきます。


index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Top Page - jquery_ajax</title>
</head>
<body>
  <input type="text" id="data">
  <input type="button" value="送信" id="submit">
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
  <script type="text/javascript">
    $("#submit").click(function () {
      $.ajax({
        type: "POST",
        url: "/send",
        data: {"data": $("#data").val()},
        success: function (msg) {
          alert("success! : " + msg);
        }
      });
    });
  </script>
</body>
</html>

フォームとボタンを1つずつ用意して、ボタンが押されたらフォームに書いた内容をサーバに送るという内容です。今回はjQueryを使うためにGoogle Libraries APIを使っています。


urls.py

# -*- coding: utf-8 -*-

from kay.routing import (
    ViewGroup, Rule
)

view_groups = [
    ViewGroup(
        Rule('/', endpoint='index', view='jquery_ajax.views.index'),
        Rule('/send', endpoint='send', methods=['POST'], view='jquery_ajax.views.send'),
    )
]

kay.routingのRuleクラスWerkzeugのRuleクラスを継承しています。その__init__()にmethodsという引数があったので、それを2つ目のルールで使っています。ここでPOSTメソッドを使うということを書いておけば、Viewでrequest.method == 'POST'とかしなくて済むので、Viewがスッキリします。


views.py

# -*- coding: utf-8 -*-

from werkzeug import Response

from kay.utils import render_to_response


def index(request):
    return render_to_response('jquery_ajax/index.html')

def send(request):
    return Response(request.form['data'] + u'ゲソ')

$.ajax()で送ったデータはrequest.formに格納されています。このrequest.formはWerkzeugのCombinedMultiDictクラスのオブジェクトなので、辞書から要素を取り出すようにキーを指定すれば要素を取得できます。


これで「うまくいった」などとフォームに書いてボタンを押すと、「success! : うまくいったゲソ」とalertされます。

MacにPython, Distribute, virtualenv(, pip)をインストールしたよ

環境

  • Mac OS X 10.6.4
  • Python 2.6.6
  • Distribute 0.6.14
  • virtualenv 1.5.1
  • pip 0.8.1

Pythonをインストールする

$ sudo port install python26
$ sudo port install python_select
$ sudo python_select python26

Distributeをインストールする

Distribute is a fork of the Setuptools project.

http://packages.python.org/distribute

エキスパートPythonプログラミング」を見るまで存在を知りませんでした><

$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py 

virtualenvをインストールする

virtualenv is a tool to create isolated Python environments.

http://virtualenv.openplans.org/
$ sudo easy_install virtualenv

pipはインストールされている

pip installs Python packages.

http://pip.openplans.org/

pipはvirtualenv環境で使えるようになっているので、自分でインストールする必要は(多分)ありません。

$ pip --version
-bash: pip: command not found
$ virtualenv ENV
$ source ENV/bin/activate
(ENV)$ pip --version
pip 0.8.1 from /Users/bojovs/Desktop/ENV/lib/python2.6/site-packages/pip-0.8.1-py2.6.egg (python 2.6)

Aquamacsにauto-install.elをインストールする

環境

流れ

auto-install.elをダウンロードする

http://www.emacswiki.org/emacs/auto-install.el からダウンロードしてきます。今回は~/Desktop/にダウンロードしました。

auto-install.elをバイトコンパイルする
  1. Aquamacs上で M-x byte-compile-file RET
  2. "Byte compile file: "と出てくるので、そこにダウンロードしたauto-install.elを指定する
  3. auto-install.elがあるディレクトリにauto-install.elcが生成される
auto-install.elとauto-install.elcをload-path以下に移動する

~/Library/Preferences/Aquamacs Emacs/以下に移動させます。

$ mkdir ~/Library/Preferences/Aquamacs\ Emacs/auto-install
$ cd ~/Desktop/
$ mv auto-install.el auto-install.elc ~/Library/Preferences/Aquamacs\ Emacs/auto-install/
Preferences.elに設定を施す

~/Library/Preferences/Aquamacs Emacs/Preferences.elに以下の設定を加えます。

;; (install-elisp-from-emacswiki "auto-install.el")
(require 'auto-install)
(setq auto-install-directory "~/Library/Preferences/Aquamacs Emacs/auto-install")
(add-to-list 'load-path auto-install-directory)
(auto-install-update-emacswiki-package-name t)
(auto-install-compatibility-setup)
(setq ediff-window-setup-function 'ediff-setup-windows-plain)


これでM-x install-elispなどが使えるようになっていればインストール成功です。
Preferences.elに加えた設定は http://www.amazon.co.jp/dp/4774143278 を参考にしました。

iptablesを使って80番ポート以外からのINPUTをDROPする方法@CentOS

以下の環境で動いているCentOS上で起動しているウェブサーバにアクセスしようとしたとき、アクセスできなかったのでメモ。問題はiptablesによるファイアーウォールのようでした(まだよくわかっていない)。

環境

流れ

まずはiptablesファイルのバックアップを取っておく。

# cp /etc/sysconfig/iptables iptables.backup

おもむろにiptablesの中を見てみる。

# iptables -L
(いろいろ出てくる)

既にいろいろ設定されているけど、これらの設定を残しておくとどうもうまくいかない。なので思い切って設定を全て消してしまいました(^o^)

(このコマンドで設定を全て消す)
# iptables -F

次にINPUTチェーンとFORWARDチェーンへのパケットをDROPする。

# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT

OUTPUTチェーンについてはACCEPTでも良いみたい。
そしてINPUTチェーンに80番ポートからのパケットの受け入れを許可するようにする。

# iptables -A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT

これでINPUTチェーンは80番ポートからのパケット受信のみを許可するようになる。必要に応じてSSHからの通信を許可したりする。
最後にiptablesへの変更を保存、iptablesの再起動をする。

# service iptables save
# service iptables restart

おしまい。
iptablesは奥が深いらしいので、そのうち勉強する。

Firefoxのアドオン&Greasemonkeyスクリプトのまとめ (2009/06/04)

Mac & EclipseでAndroidの開発環境を整える

環境

行程

Eclipseをダウンロードする

http://www.eclipse.org/downloads/から「Eclipse IDE for Java Developers」をダウンロードする。

Eclipseをインストールする

ダウンロードしたファイルを解凍した後、アプリケーションディレクトリに移動します。

Android SDKをダウンロードする

http://developer.android.com/sdk/からダウンロードする。

Android SDKをインストールする

ダウンロードしたzipファイルを解凍後、適当な名前にリネームしてアプリケーションディレクトリに移動します(ディレクトリはどこでも良いと思うけど、僕はここにしました)。
そして.bash_profileを以下のように編集します。

$ vim ~/.bash_profile
export PATH=/Applications/android_sdk/1.5_r1/tools:$PATH
ADT (Android Development Tools)をEclipseにインストールする
  • Eclipse起動
  • 「Help」→「Software Updates...」
  • 「Available Software」
  • 「Add Site...」
  • 「Location」に以下のURLを入力
https://dl-ssl.google.com/android/eclipse/
  • 「OK」
    • 入力したURLが一覧に表示され、入れ子で「Developer Tools」が現れる
  • 「Developer Tools」のチェックボックスにチェックを入れ、「Install...」
    • URLと「Android DDMS」、「Android Development Tools」にもチェックが入る
  • Android DDMSとAndroid Development Toolsをインストールしますよ」みたいなウィザードが出る
    • 「Next >」
    • 「I accept ...」を選択
    • 「Finish」
  • Eclipse側から「再起動しますか?」と聞かれるので、再起動する
Eclipseの設定
  • Eclipse」→「Preferenses」
  • Android」という項目をクリック
    • ダイアログが出てくる
      • (ちょっと驚く)
    • プライバシーポリシーがどうのこうの
      • 「Proceed」
    • 「ロケーションの設定をしてない」と言われる
      • 「OK」
  • 「Browse...」をクリックし、インストールしたSDKディレクトリを指定する
  • 「Apply」し「OK」

おしまい

そういえばEclipseを日本語化してない…。ま、いいか(^^;)