ラベル develop の投稿を表示しています。 すべての投稿を表示
ラベル develop の投稿を表示しています。 すべての投稿を表示

2012/05/12

Ubuntu 12.04 に色々とアプリケーションをインストールした

Ubuntu 12.04 にいつもの環境を整えた。

環境系

# 日本語ディレクトリを英語に
$ LANG=C xdg-user-dirs-gtk-update

# aptitude はデフォルトではインストールされていない
$ sudo apt-get aptitude

# システムをアップデート
$ sudo aptitude update
$ sudo aptitude full-upgrade

# screen も入ってなかった
$ sudo aptitude install -y screen

# 日本語入力はmozc
$ sudo aptitude install -y ibus-mozc

# 日本語のほうがありがたい
$ sudo aptitude install -y manpages-ja

# シェルは zsh
$ sudo aptitude install -y zsh

# vim 必須
$ sudo aptitude install -y vim-nox vim-gnome

# lv 使う
$ sudo aptitude install -y lv

アプリケーション

# Google Chrome と Dropbox は本家からインストールする

# コマンドラインランチャ。これがあれば左側のいらない
$ sudo aptitude install -y gnome-do

# F12でターミナルが降りてくる。とても便利。zsh を使う際、bash をかませる必要がなくなった
$ sudo aptitude install -y guake

開発環境

# 開発するならこれは必須
$ sudo aptitude install -y build-essential

# webサーバは無難にapache
$ sudo aptitude install -y apache2

# DB は PostgreSQL(バージョンが9.1.3になってる)
$ sudo aptitude install -y postgresql libpq-dev pgadmin3

# Subversion から git に完全移行中なのであえて Subversion は入れない
$ sudo aptitude install -y git-core

# ライブラリのインストール(zlib1g-dev とか libssl-dev はすでに入ってたけど一応)
$ sudo aptitude install -y zlib1g-dev libssl-dev libreadline-dev libxslt-dev libxml2-dev libyaml-dev libsqlite3-dev

# rbenv を github から取得
$ mkdir ~/git_repos
$ cd ~/git_repos
$ git clone git://github.com/sstephenson/rbenv.git
$ cd ~
$ ln -s git_repos/rbenv .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .zshrc
$ echo 'eval "$(rbenv init -)"' >> .zshrc
$ source .zshrc

# ruby-build を github から取得
$ cd git_repos
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build
$ sudo sh install.sh

# 最新バージョンを確認して、最新をインストールして、使用するように設定する
$ rbenv install
$ rbenv install 1.9.3-p194
$ rbenv rehash
$ rbenv global 1.9.3-p194
Ruby on Rails 3.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました - Rails 雑感 - Ruby on Rails with OIAXとかを参照すると rbenv は apt で入れられるようになったみたいだが、自分の環境だとダメだった。
インストールはできるが、rbenv global しても /usr/bin/ruby が居座り続ける。
apt から rbenv をインストールすると ruby1.9.1(実体はruby1.9.3-p0)もインストールされる。
これが /usr/bin/ruby の実体になるので、rbenv global してから ruby -v すると、ruby1.9.3-p0 のまま。
ruby1.9.1 パッケージを削除しようとすると rbenv が依存しているため rbenv が動かなくなる。
どうにもならないので、全部削除して rbenv を github から取ってきたらうまくいった。

2011/04/27

devise でカスタム認証ロジックを組み込む

たとえば、退職したユーザにはログインさせたくないけど、表示等の関係でユーザ情報を削除できない場合、users テーブルに can_login 列などを作って、フラグ管理しますよね。
んで can_login 列の値でログインを制御したい場合、どう組み込めばいいかなーと悩んでたんですがとりあえずできたのでエントリにしてみます。
devise やコアとなってる warden にそんな機能はありそうなもんだけど、よくわからなかったので自前で仕込みました。
で、認証を行っているメソッドに追加処理をつっこんでやればいいわけです。
devise の lib/devise/controllers/helpers.rb を見ると、authenticate_user! は warden.authenticate! を、current_user は warden.authenticate を呼びだしてる模様。
warden のソースで lib/warden/proxy.rb を見ると、authenticate! も authenticate も _perform_authentication を呼び出しているので、ここで細工してやればよさそう。
んで、最終的には $RAILS_ROOT/config/initializers/extensions/warden_extension.rb を配置して、中身はこんな感じ。
# -*- coding: utf-8 -*-
module Warden
  class Proxy
    alias_method :original_perform_authentication, :_perform_authentication

    private
    def _perform_authentication(*args)
      user, opts = original_perform_authentication(*args)
      # このチェックを入れないとリダイレクトループになる
      unless winning_strategy && winning_strategy.user
        user = nil if user && !user.can_login?
      end
      [user, opts]
    end
  end
end
元メソッド呼び出したあとに、追加でカスタムロジックを追加している。
んで、その内容自体を元メソッドとして上書きってな感じ。
リダイレクトループにさえならなければ、もっとシンプルなソースになったのに、残念だ。

2010/05/15

ubuntu 10.04 に rails 開発環境を作る - PostgreSQL 設定編

rails から PostgreSQL にアクセスできる設定を行う。
まず、pgadmin からアクセスできるようにしよう。
デフォルトでは postgres ユーザのパスワードが分からないので、パスワードを設定する。
sudo passwd postgres で好きなパスワードを設定する。(今回は仮に12345とする)
次に su - postgres で postgres ユーザになり、PostgreSQL にログインする。
$ psql template1
template1 =# alter user postgres with password '12345';
template1 =# \q
つまり、パスワードを合わせておくということ。
これで pgadmin を立ち上げると postgres ユーザとして localhost のサーバを登録できるはず。

せっかくなので、ここでデータベースとログインロールを作っておこう。
pgadmin から GUI で作ることもできる。(割愛)
postgres ユーザで psql でログイン。
psql =# createdb test;
psql =# create role rails with login password '98765';
psql =# \q

先に rails のプロジェクトも作っておこう。
$ rails test -d postgresql

database.yml を変更しておこう。
development:
  adapter: postgresql
  encoding: utf8
  database: test
  pool: 5
  username: rails
  password: 98765

次に pg_hba.conf を修正する。
ファイルは /etc/postgresql/8.4/main/pg_hba.conf  にあった。
見つからない場合、sudo find / "pg_hba.conf" -type f でもやってみよう。
sudo vim /etc/postgresql/8.4/main/pg_hba.conf  と vim を起動する。
すると下記のような設定になっていた。
# Database administrative login by UNIX sockets
local   all         postgres                          ident
# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5
このままではパスワードでログインできないので、パスワードでログインできるように設定する。
で、ここでハマった。
事前調査の結果、"rails では TCP socket でアクセスするので、local じゃなくて host を変更する"と認識していた。
#host    all         all         127.0.0.1/32          md5
host    all         all         127.0.0.1/32          password
と変更すればいい、って情報があったのでこの一行を編集し PostgreSQL を再起動した。
$ sudo /etc/init.d/postgresql-8.4 restart
しかし、マイグレーションが失敗する。
手動でテーブル作って、script/console からデータの登録や取得をしようとしても失敗する。
で、悩みつつあれこれトライ&エラーを繰り返してみた結果、結局こういうことだった。
・database.yml で host: localhost 設定がされていれば、TCP socket を使用する。
・host: localhost 設定がされていない(host 設定がない)場合、UNIX socket を使用する。
つまり、デフォルトで作られた設定ファイルには  host 設定がなかったので、
local   all         all                               ident
の設定で接続しようとしていた。
#local   all         all                               ident
local   all         all                               password
と変更してやると、接続できマイグレーションも実行できた。

しかし、開発環境は別にどちらでもいいが、本番などは外部サーバにアクセスすることも多々あるし、一律 TCP での設定にしておいたほうがいいかなーと思ったので、database.yml に host: localhost の設定を追加して、host 設定の方を password にすることにした。

これで、rails から PostgreSQL に接続する設定(+α)は終了。

2010/05/08

ubuntu 10.04 に rails 開発環境を作る - ubuntu 設定編

最新の LTS が出たということで、ubuntu 10.04 をインストールし、rails 開発環境を整えた時のメモ。
今回は ubuntu の設定を。

まずは、LANG=C xdg-user-dirs-gtk-update でディレクトリ名を英語に。

基本的に使うものをインストール。
sudo apt-get install -y build-essential ubuntu-restricted-extras zsh zsh-doc zsh-dev zlib1g-dev libssl-dev lv manpages-ja vim-nox vim-gnome guake gnome-do

サーバ系をインストール。
sudo apt-get install -y ssh apache2 subversion git-core git-doc

DB 関連をインストール。
sudo apt-get install -y postgresql libpq-dev pgadmin3 sqlite3 sqlite3-doc

Java 関連をインストール。
# Java は Sun のものを入れる。
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install -y sun-java6-jdk
sudo update-alternatives --config java
sudo apt-get install -y maven2

scala 関連をインストール。
sudo apt-get install -y scala scala-doc

Ruby 関連をインストール。
ただし、rubygems  は web から最新を取得。
sudo apt-get install -y ruby irb rake rdoc ri ruby-dev libopenssl-ruby

gem をインストール。
sudo gem install -y wirble refe rspec rails pg jrails haml tlsmail
MySQL じゃなく、PostgreSQL なのは Scala + Lift と相性が悪いらしいので。
あと、昔に rails + MySQL でトランザクションがきかないというトラウマがあるので。

次回は PostgreSQL 設定の予定。

2010/04/15

IronRuby 1.0

IronRuby 1.0登場、はじめての安定版リリース
http://journal.mycom.co.jp/news/2010/04/14/041/index.html

昔は Rails は動かない(サポートしない)なんて言っていたような気がするけど、ちゃっかり動くようになっているとか。
Ruby 1.8.6 との互換性も「ほぼ」ということなので、完ぺきではないにしろ便利に使えそうですね。
Silverlightと連携させることでブラウザでRubyスクリプトを実行するといったことができるようになる。
ってのが面白そうですな。

自宅マシンに eclipse をインストール

もう少ししたら、Java で SAStruts + S2JDBC がメインになりそうなので、自宅マシンに eclipse をインストール。
とりあえずは Pleiades 入れておけば大丈夫だろうと思い、ダウンロードして展開。
ダウンロード先は D:\Users\<user_name>\Downloads
この状態で、ダウンロードした zip ファイルを展開すると一部ファイルがエラーになる。

「パスが長すぎます」ということらしい。

ユーザー名もアルファベット 6 文字程度だし、特殊な場所にダウンロードしたわけじゃないのにどんだけだよと思い、zip ファイルを D ドライブ直下に移動。
そのまま解凍じゃなく、D:\pleiades として解凍。
これでエラーもなく解凍でき、C:\eclipse に移動して、インストール終了。

あとは、Launchy が拾ってくれるように、ユーザのスタートメニューにショートカット作成。

細かい設定はおいといてとりあえずインストール終了。
こんだけでかいアプリケーションだと zip よりインストーラで配布してくれたほうが嬉しいかもしれない。

2010/04/13

Visual Studio 2010 RTM

Visual Studio 2010 の開発が完了したとか。

  • 4/13:英語版を MSDN Subscription 会員向けに提供開始
  • 4/20:日本語版を MSDN Subscription 会員向けに提供開始
  • 4/27:Express Edition の日本語版を提供開始
  • 5/01:企業向けにボリュームライセンスを提供開始
  • 6/18:パッケージ製品の販売開始
のようですね。
http://www.microsoft.com/japan/presspass/detail.aspx?newsid=3840

Subscription 会員ではないので、とりあえず4/27まで待ち。

Protorype.js が jQuery 風に

DOMエクステンションはPrototype.jsの犯した最大の失敗
http://journal.mycom.co.jp/news/2010/04/12/036/index.html

これやっちゃうと当然互換性なくなるよね?
jQueryに対する優位性はどう出してくるんだろう?
rails もデフォルトを jQuery に変更してくるかも。

ASP.NET でデフォルトで HtmlEncode してくれる構文がサポート

ASP.NET 4(そして、ASP.NET MVC 2)におけるHTMLエンコーディング出力用の新しい<%: %>構文
http://www.atmarkit.co.jp/fdotnet/scottgublog/20100412ltgtsyntax/ltgtsyntax.html

やっとかって感じもするけどこれはうれしい。
従来のコントロールベースな ASP.NET の場合、<% %> 構文やめて aspx 全体でも xml になるようにしようよ(出力のデフォルトがxhtmlなんだから)と思ってた。
でも、MVC だとそうもいかないので、まっとうな進歩だろう。

2010/03/03

当たった

WEB+DBマガジンのアンケートで当たった

2010/02/09

コップ本読了

コップ本こと Scalaスケーラブルプログラミング を読み終えた。
とはいえ一応一回目を読み終えたというだけで、まだまだ理解が足りない。
Scala 入門も三回しか書いていないし。
これからじっくり、読み直し、写経して身につけていかないとな。

2010/02/04

Scala 入門3 - コンストラクタ追記

コンストラクタ宣言とともに、プロパティも宣言

class Hoge(val x:Int, val y:Int) {
  // implementations
}

基本のコンストラクタを隠蔽する

class Hoge(private x:Int, private y:Int) {
  // implementations
}

2010/01/28

Scala 入門2 - クラスとコンストラクタ

Scala でクラスを定義する。

class Test {
}
これだけ。

Scala はクラス定義と同時にコンストラクタを定義できる。

class Test(x:Int, y:Int, z:Int) {
  // 既存メソッドをオーバーライドするには override が必要
  override def toString = "x: " + x + ", y: " + y + ", z: " + z
}
val t = new Test(1, 2, 3)
println(t) // x: 1, y: 2, z: 3
ただし、これでは t.x のように外部からアクセスできない。
アクセスするために、引数をフィールドに保持する。(デフォルトでpublic)
class Test(x:Int, y:Int, z:Int) {
  val a = x
  val b = y
  val c = z
  override def toString = "a: " + a + ", b: " + b + ", c: " + c
}
val t = new Test(1, 2, 3)
println(t.a) // 1

コンストラクタのオーバーライドもできるよ。

class Test(x:Int, y:Int, z:Int) {
  val a = x
  val b = y
  val c = z
  def this(x:Int, y:Int) = this(x, y, 0)
  override def toString = "a: " + a + ", b: " + b + ", c: " + c
}
val t = new Test(1, 2)
println(t) // a: 1, b: 2, c: 0

でもこれはダメ。

class Test(x:Int, y:Int, z:Int) {
  var a = x
  var b = y
  var c = z
  def this(x:Int, y:Int) = {
    this.a = x
    this.b = y
    this.c = 0
  }
  override def toString = "a: " + a + ", b: " + b + ", c: " + c
}
val t = new Test(1, 2)
println(t)
// こんなコンパイルエラーが出る
//(fragment of test.scala):6: error: '(' expected but '.' found.
//    this.a = x
//         ^
コンストラクタをオーバーライドする場合、必ずクラス定義と同時に宣言したコンストラクタを最初に呼ばないといけない。
class Test(x:Int, y:Int, z:Int) {
  var a = x
  var b = y
  var c = z
  // こういうのはいい
  def this(x:Int, y:Int) = {
    this(x, y, 0)
    this.c = 1
  }
  override def toString = "a: " + a + ", b: " + b + ", c: " + c
}
val t = new Test(1, 2)
println(t) // a: 1, b: 2, c: 1
これも大丈夫(間接的に呼び出しているため)
class Test(x:Int, y:Int, z:Int) {
  val a = x
  val b = y
  val c = z
  def this(x:Int, y:Int) = this(x, y, 0)
  def this(x:Int) = this(x, 0)
  override def toString = "a: " + a + ", b: " + b + ", c: " + c
}
val t = new Test(1)
println(t) // a: 1, b: 0, c: 0

2010/01/24

vim に scala 用の設定を行う

まず、scala.vim を取得し、~/.vim/syntax に配置する。
次に scala ファイルに対して適応させるため、 ~/.vim/filetype.vim に(なければ作成)こちら の設定を行う。
とりあえずこれで大丈夫なのだが、タブが4スペース分になってしまう。
参考書では2スペースなので、それに従っておく。
~/.vim/ftplugin に scala.vim を作成し、下記を記述。
" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
set expandtab
set tabstop=2 shiftwidth=2 softtabstop=2
set autoindent
set fileencoding=utf-8
set encoding=utf-8
set fileformat=unix

これでとりあえずはいいかな。

2010/01/23

Scala 始めました

Scala なる言語がおもしろそうなのでやってみる。
Scalaスケーラブルプログラミング にてお勉強。
まだ、1章と2章しか読めてないけど。
そろそろ実際に打ち込んで勉強していかないとな。
とりあえず、lift でなんか作れるぐらいまでがんばろう。

2010/01/16

.net by au

http://www.kddi.com/business/netbyau/index.html

au 上で .NET アプリケーションを動かす .net by au について発表されてます。
2010年3月までに申し込めば、開発に必要な各種ツールが無料で提供されるみたいです。
さっそく申し込んでおきました。

開発 PC が XP だけってのが気になるなぁ。
Windows7 が含まれていないのはまあいいとして、Vista も含まれていないってのは何か不都合があるからなんじゃないかと。
Vista で不都合あったら、Windows7 も怪しいだろうなぁ。

そして、KDDI は基本的に法人向けと考えているようで、契約も法人契約になります。(会社名必須)
今のところ対応機種は E05SH/E06SH だけですが、個人向け端末に搭載される予定はあるのかなぁ?
ぜひとも自分の携帯を便利にしていきたいんだけど。

2010/01/13

guake で zsh を使いたい場合

vmware player 上の mint8 の設定をちまちまと行う。
sudo apt-get install -y build-esseintial zsh zsh-doc zsh-dev lv manpages-ja
sudo apt-get install -y vim-nox vim-gnome
sudo apt-get install -y ssh apache2 subversion git-core git-doc
sudo apt-get install -y mysql-server mysql-client mysql-admin mysql-query-browser libmysqlclient-dev
sudo apt-get install -y sun-java6-jdk sun-java6-doc sun-java6-fonts scala scala-doc
sudo apt-get install -y ruby irb rake rdoc ruby-dev libmysql-ruby libopenssl-ruby
sudo apt-get install -y filezilla guake jd
sudo gem install -y wirble refe vim-ruby rails mysql jrails haml

まあ、こんな感じ。
guake がよさげだったので初めて導入してみた。
しかし、F12 を押しても一瞬それらしいものが現れてすぐ消える。
どうも zsh はうまく動かないようだ。
しょうがないので、guake では bash を使用することにした。
で、おもむろに screen とすると、zsh が立ち上がるじゃないか(ログインシェルが zsh だから当然か)
で、guake も正常動作している模様。
なるほど、しょせんエミュレータだもんな。
というわけで guake 上で zsh を使いたい場合は、screen をかませればいいようだ。