2010/11/26

blogger に新しいはてブボタンを導入してみた

使いやすくなりました! はてなブックマークボタン

新しいはてブボタンができたということで早速導入。
  • blog タイトルの隣に blog 全体のブックマークボタン
  • 各エントリの下部にエントリオンリーのブックマークボタン
の二種を配置したかったので、ちょっと作業が必要だった。
まず、上記のリンクから自分のサイト用のスクリプトを作成。
<a
  href="http://b.hatena.ne.jp/entry/http://pinzolog.blogspot.com/"
  class="hatena-bookmark-button"
  data-hatena-bookmark-title="tail -f pinzo.log"
  data-hatena-bookmark-layout="standard"
  title="このエントリをはてなブックマークに追加">
    <img
      src="http://b.st-hatena.com/images/entry-button/button-only.gif"
      alt="このエントリをはてなブックマークに追加"
      width="20"
      height="20"
      style="border: none;" />
</a>
<script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>

  1. blogger のダッシュボードからデザイン→htmlの編集で、編集画面を表示する。
  2. ウィジェットのテンプレートを展開にチェックを入れて、テンプレート内部を編集できるようにする。
  3. //div[@id='header-innder']/div[@class='titlewrapper']/h1[@class='title']/b:include[@name='title']の直後に上記のスクリプトを配置する。(ただ、'このエントリーを'は取り除いた)
  4. //div[@class='post-share-buttons']の直後に下記のスクリプトを配置する
    <a 
      expr:href='&quot;http://b.hatena.ne.jp/entry/&quot; + data:post.url'
      class="hatena-bookmark-button"
      expr:data-hatena-bookmark-title='tail -f pinzo.log : &quot; + data:post.title'
      data-hatena-bookmark-layout="standard"
      title="このエントリーをはてなブックマークに追加">
        <img
          src="http://b.st-hatena.com/images/entry-button/button-only.gif"
          alt="このエントリーをはてなブックマークに追加"
          width="20"
          height="20"
          style="border: none;" />
    </a>
    <script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
    
  5. 作業終了。お疲れ様でした

新しいはてブボタンはなかなか便利ですね。
ただ、alt から'このエントリーを'を取り除いたのがきいてない気がするぞ
※ちなみに、はてブボタンのソースは実際は一行ですが、適宜改行・インデントしてあります

2010/11/25

? にのっていない gmail のキーボードショートカット

d : cc がはじめから入力可能(テキストエリアが表示されている)なメール作成
b : cc と bcc がはじめから入力可能なメール作成
ただし c のように Shift と組み合わせての別窓表示は不可。

Shift + o : 別窓でメールを表示

ほかにもあるかもしれない

2010/11/23

愛用している Google Chrome 拡張機能

以前少し書いたとおり、メインのブラウザは Goocle Chrome です。
職場では Windows7、開発環境は VMWare 上の Ubuntu、移動中にいじるノートPCも Ubuntu と様々な環境をふらふらすると、ブックマークと拡張機能の同期がかかせません。
それでいて、サクサク動いて firefox ほどではないにしても十分な拡張があります。

そんなわけで、せっかくだし自分の愛用している拡張機能を列挙しておこうと思う。
AutoPatchWork
定番の AutoPagerize 系のやつ。画面上であまり主張しないのが好み。

Better Gmail (Unofficial)
色々と GMail を便利にしてくれるらしい。いいなと思うのは添付ファイルのアイコンぐらいでそんなに恩恵を感じない。

Bubble Translate
翻訳用の拡張。
Rails3 とか使ってると英語サイトバリバリ見ないとダメ。これは必要な部分のみその場で翻訳してくれるので非常に重宝する。

Chrome Reader
Google Reader と連携する拡張機能。
気になった blog をその場で登録できる。その場でタグを指定できるのがいい。
アイコンで登録しているかどうかもわかるし、remove もその場でできる。
必要な機能を最低限の労力で利用できる。

Chromed Bird
ほぼ発信専門でそんなに TL を眺めないので、これぐらいで十分。

ChromeMilk
最近はもっぱら Google Task なので、そろそろ無効にしておこうかとも思ってるけど、RTMの拡張機能。
時間指定してリマインダー飛ばせるのは重宝するのだが、どうしても GMail やカレンダーと連携できる Google Task を使ってしまう。

Create Link
見てるページのアンカータグを作ってくれる。
blog 書くとき用。このエントリでは使いまくり。

CSSViewer
カーソル上のエレメントの css が一望できる。便利。
colorzilla の代わりに入れた。
カーソルで指すことのできない要素(コンテナ系とか)は見れないのが難点。

Gmail Fixed Width Text
メールは当幅じゃなきゃ。
ブラウザで GMail 見るときに当幅フォントで表示してくれる。

Google Mail Checker Plus
Thunderbird を窓から投げ捨てて、GMail 一本に統一したので導入した。
新着がないときにクリックした場合、GMail をひらいてくれる時と、空の吹き出しが表示される時がある。
条件がよく分からん。

Google Quick Scroll
ぐぐったサイトで、さらに目的の場所までナビゲートしてくれるエスコート上手な拡張機能。

IE Tab
ページを IE コンポーネントで表示してくれる拡張。
最近使わないけど、やっぱりあったほうがいいし、いつ使うことになるかわからないからいれてある。

Incredible StartPage - より使いやすいChromeのスタートページ
どっちかっていうといれたままになってるだけの拡張機能。
ブックマークはこちらのほうが見やすい。
でもよく使うサイトは見れない。
素のスタートページとどちらがいいかはお好み次第。

Lite Bookmarks
Google Bookmark 検索用拡張機能。
いろいろ使ってみたけど、これが一番シンプルで使いやすかった。

Neat Bookmarks
Chrome のブックマーク用の拡張機能。
基本的にブラウザのブックマークにはほんとによく使うものしか登録しないので、一覧表示できるやつが欲しかった。
常に別タブで開くことができるオプションがあれば言うことないんだけどな。

SmoothScroll
スクロールをスムーズにしてくれるらしいが、実は実感したことがない。
そっこーいれたため、これが当たり前になってるからだろうか??

Taberareloo
一番使う拡張機能かも。
主にブックマークに使用していて、はてブと Google Bookmark にブックマークして、Evernote にサイトをクリップ、そしてブックマークしたよって twitter へ投稿する。
これを一発でやってくれる。
Evernote の拡張とかあれはダメだ。クリッピングにかかる時間が長すぎる。

はてなブックマーク GoogleChrome 拡張
はてブの拡張。一応ブックマークとして利用もしているけど、サブ程度(メインは Google Bookmark)。
ブックマーク自体も Taberareloo 経由なので、この拡張は 100% 純粋に他ユーザのコメントを見るため用。
Firefox の拡張と違って、タブを使わないので、サイトとコメント同時にみられるのは便利だと思う。

とまあ、タイトルの割には大して利用していない拡張もあったけど、気にしない。

2010/11/11

unite.vim で :UniteWithInput 時に tab で補完がきかなくなった

vim で unite.vim を愛用しているんだけど、最新に更新したら使いにくくなった。
Rails 開発時の使い方はこんな感じ
・vim を立ち上げたら :cd $RAILS_ROOT/app でカレントディレクトリを app ディレクトリへ
・C-f に :UniteWithInput file を登録してあるので、状況に応じて C-f
・cont<tab><enter> で unit.vim のウィンドウに controllers ディレクトリのファイル一覧を表示
・ファイルを絞り込むなり、C-n でカーソル移動なりして開く
だいたいこんな感じで、ファイルのオープンを行ってた。
それが、なぜか tab でディレクトリの補完がきかなくなった(^Iが入力される)
また、ディレクトリ名の入力だけではダメで、最後に / を入れないとディレクトリ内部のファイルを列挙してくれないようだ。
(tabで補完できていた頃は気にしていなかっただけかもしれないが)
ちょっと unite.jax とにらめっこしてこよう。

[追記]
ありがたいことに機能追加していただけました。

2010/11/09

Rails3 で POP before SMTP

Rails3 で POP before SMTP にてメール送信できるまで。

ジェネレータで mailer を作成する。
rails g mailer TestMailer

config/application.rb にメール設定を追加
module Sample
  class Application < Rails::Application
    # ---- なんかいろいろ ----

    # mail setting
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      :enable_starttls_auto => false,
      :address => 'smtp.example.com',
      :port => 587,
      :domain => 'localhost',
      :user_name => 'user',
      :password => 'password'
    }
  end
end

メール本文を erb で。
<%= @text %>

配信メソッドを mailers/test_mailer.rb に追加。
# -*- coding: utf-8 -*-
require 'net/pop'
class TestMailer < ActionMailer::Base

  # テストメールを配信する
  def test
    @text = 'this is test mail' # インスタンス変数で view にデータを渡せる
    mail(
      :subject => 'Test mail',
      :from => 'from@example.com',
      :to => 'to@example.com'
    )
    authenticate
  end

  private
  # 認証メソッド
  def authenticate
    Net::POP3.auth_only(self.smtp_settings[:address], 110, self.smtp_settings[:user_name], self.smtp_settings[:password])
  end
end

実行
rails runner "TestMailer.test.deliver"

これで、deliver メソッドでの配信前に POP3 の認証が終わっているのでメールの送信ができる。
mailer をたくさん作るなら、ActionMailer::Base を拡張するようにしたほうがいいかな。

参考にしたサイト:てらじろぐ | ActionMailer設定色々

Rails3 のメール送信で "hostname was not match with the server certificate" というエラーが出た場合には

Rails3.0.1 にてメール送信のテストをしているとこんなエラーがでた。
/usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands/runner.rb:50: /usr/lib/ruby/1.8/openssl/ssl.rb:123:in `post_connection_check': hostname was not match with the server certificate (OpenSSL::SSL::SSLError)
        from /usr/lib/ruby/1.8/net/smtp.rb:582:in `tlsconnect'
        from /usr/lib/ruby/1.8/net/smtp.rb:562:in `do_start'
        from /usr/lib/ruby/1.8/net/smtp.rb:525:in `start'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/network/delivery_methods/smtp.rb:115:in `deliver!'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:1928:in `do_delivery'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:228:in `deliver'
        from /usr/lib/ruby/gems/1.8/gems/actionmailer-3.0.1/lib/action_mailer/base.rb:401:in `deliver_mail'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications.rb:52:in `instrument'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
        from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.1/lib/active_support/notifications.rb:52:in `instrument'
        from /usr/lib/ruby/gems/1.8/gems/actionmailer-3.0.1/lib/action_mailer/base.rb:399:in `deliver_mail'
        from /usr/lib/ruby/gems/1.8/gems/mail-2.2.9/lib/mail/message.rb:228:in `deliver'
        from (eval):1
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands.rb:39:in `eval'
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands/runner.rb:50
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands.rb:39:in `require'
        from /usr/lib/ruby/gems/1.8/gems/railties-3.0.1/lib/rails/commands.rb:39
        from script/rails:6:in `require'
        from script/rails:6
TLS接続を使用としてエラーになっているみたいなので、TLS接続をしないようにすればいいらしい。(今の環境はPOP before SMTPなのでTLSは必要ない)
config/application.rb にて smtp_settings に設定を追加すればメール送信できた。
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => false, # ←これ
  :address => 'example.com',
  :port => 587,
  :domain => 'localhost',
  :user_name => 'user',
  :password => 'password'
}

2010/11/06

Rails3 で RJS の page オブジェクトを拡張する

例えば、facebox や fancybox のような Lightbox 系のスクリプトを使う場合、毎度毎度スクリプトを出力するコードはかかないですよね。
で、一度サーバ側で処理が必要な場合が多いので、Rails ではたいてい RJS などを使って AJAX 処理をすると思います。
その場合、helper に処理を書いてしまうのが楽なのですが、引数に page オブジェクトを渡す必要があります。
def popup(page, partial_name, locals)
  # popup 内の html を定義してある div を非同期更新
  page[:popup].replace_html :partial => partial_name, :locals => locals
  # facebox はたしかこんな感じで出せたと思う。うろ覚え
  page << '$.facebox($("#popup").html());'
end
でも、page.popup(partial_name, locals) とかけたほうがスマートな気がする。 page オブジェクトは ActionView::Helpers::PrototypeHelper::JavaScriptGenerator のインスタンスなのでこれを拡張してみる。
class ActionView::Helpers::PrototypeHelper::JavaScriptGenerator
  def popup(partial_name, locals)
    self[:popup].replace_html :partial => partial_name, :locals => locals
    self << '$.facebox($("#popup").html());'
  end
end
単純に page を self に書き換えただけ。ところがこれだとエラーがでる。 self に [] が定義されていないらしい。 というのも、page オブジェクトの各種メソッドが定義されているのは、さらに内部のモジュールである GeneratorMethods だからみたい。 というわけで、
module ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods
  def popup(partial_name, locals)
    self[:popup].replace_html :partial => partial_name, :locals => locals
    self << '$.facebox($("#popup").html());'
  end
end
これで OK

2010/11/05

既存のアプリを Rails 3.0.0 から Rails 3.0.1 へアップデートする

いつの間にか Rails 3.0.1 が出ていたのでアップデートしてみた。
まず、Gemfile にて gem 'rails', '3.0.0' となっているところを gem 'rails', '3.0.1' にする。
これで、rails s とやってみると、
You have requested:
  rails = 3.0.1

the bundle currently has rails locked at 3.0.0.
Try running `bundle update rails`
Try running `bundle insatall`
とエラーメッセージが表示される。
ローカルにはインストールされているけどロックされているから利用しないのね。
Gemfile.lock を直接いじっても対応できるような気もするが、素直に bundle update rails をする。
これだけでアップデートできた。
Rails 2.x.x のころはもう少し面倒だった気もするが、簡単だ。
API の変更部分にさえ気を遣えば意外と簡単にアップデートできるな。

gem install pg がエラーではまった

先ほどのエントリにて Thinkpad の環境構築時に唯一はまった点。
gem 以外の環境構築ができたので、rails アプリを svn で持ってきて bundle install した。
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
        ERROR: Failed to build gem native extension.

/home/pinzolo/.rvm/rubies/ruby-1.8.7-p302/bin/ruby extconf.rb
checking for pg_config... yes 
checking for libpq-fe.h... yes 
checking for libpq/libpq-fs.h... yes 
checking for PQconnectdb() in -lpq... no 
checking for PQconnectdb() in -llibpq... no 
checking for PQconnectdb() in -lms/libpq... no 
Can't find the PostgreSQL client library (libpq) 
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers.  Check the mkmf.log file for more 
details.  You may need configuration options. 

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/pinzolo/.rvm/rubies/ruby-1.8.7-p302/bin/ruby
        --with-pg
        --without-pg
        --with-pg-config
        --without-pg-config
        --with-pg-dir
        --without-pg-dir
        --with-pg-include
        --without-pg-include=${pg-dir}/include
        --with-pg-lib
        --without-pg-lib=${pg-dir}/lib
        --enable-static-build
        --disable-static-build

Gem files will remain installed in /home/pinzolo/.rvm/rubies/ruby-1.8.7-p302/gems/pg-0.9.0 for inspection.
Results logged to /home/pinzolo/.rvm/rubies/ruby-1.8.7-p302/gems/pg-0.9.0/ext/gem_make.out
いくつか調べたが、ずばりな解は見つからなかった。
要するにライブラリが見つからないんだろうと言うことで、
gem install pg -- --with-pq-config=/usr/lib/postgresql/8.4/bin --with-pg-lib=/usr/lib
てやったらインストールできた。めでたしめでたし。
ここまでが昨日。

でもよく考えたら pg_config って /usr/lib/postgresql/8.4/bin にはない。
てことは --with-pg-config=/usr/lib/postgresql/8.4/bin はおかしいんじゃないのか?
というわけで、いったん pg をアンインストールして、今度は下記を実行。
gem install pg -- --with-pg-lib=/usr/lib
おお、インストールできた。というわけで gem install pg -- --with-pg-lib=/usr/lib が正解です。
/usr/lib なんて参照のためにあるような場所なのに見てくれてないのか・・・

Thinkpad X60に ubuntu をセットアップ

持ち運べて開発できるノートPCが欲しかった。
先日、Vista のノートが壊れてしまい、家には Centrino 時代の Vaio (OSはXP)だけになっていた。
起動させてメール見るのにも5分~10分もかかるという今となっては残念なシロモノ。
メモリ2Gのおかげで立ち上がればそれなりに使えるが、開発に使おうと思える物ではない。
で、開発用ノートなんだけど、今なら MacBook Air 11'inch か Thinkpad X201s に Ubuntu だよなぁと。
欲を言えばどっちも欲しい。誰か下さい
いや、まあどっちかを買う余裕も厳しいわけですがね、ハハハ

そんなわけで、先日池袋のソフマップ中古ショップをふらっと除いてみたら、Thinkpad X60 が 20,000 であった。
英語キーボードでメモリは既に 2G。ついでに OS も英語版 XP だったが。
どうも液晶に一部色落ちのような物があるらしいから、中古値段のさらに半額だったらしい。(英語OSだからってのもあるかもしれないが)
念のため、電源入れてもらって液晶を確認したが気になる程度じゃない。
これに40GBの Intel SSD 乗っけて、Ubuntu 入れりゃそこそこ使える開発マシンになるんじゃないか?と思い、購入した。
帰りにヨドバシで Intel SSD 40GB を購入して自宅で換装。
なんというか、ノートPCのくせに換装の楽なこと。Thinkpad のいいところだねぇ。
環境構築も一カ所以外はほとんど苦労せず完了。DropBox と Chrome のおかげで以前よりだいぶ短縮できた。

一昔前の型だからパフォーマンスはそんなに期待していなかったけど、SSDの恩恵だろうけどかなり満足行くレベル。
さすがにメインマシン(Core i7、メモリ8G)上の VMWare よりは劣るが。
ただ、バッテリーがガタがきているのかしらないが、全然もたない。
というか、ログインしたら「壊れてるかも」って警告される。
つうわけでここで代替品を購入。
純正品より遙かに安いし、評判もいいみたいだし。

2010/11/04

vim で :w は使わず :up を使うようにする

という決意表明。

:w としようとして :wq とやってしまって、せっかくのバッファが全て吹っ飛ぶ。
一日に二、三回やってしまう。

あとこんなのもあるみたい。
vimでファイルの保存に:w使うやつなんなの - <s>gnarl,</s>技術メモ”’<marquee><textarea>¥

2010/11/02

%s がシンボルの配列ならよかったのに

Ruby の %記法便利ですよね。
よく使うのは %w と % そのものでしょうか?
%s というのもあってこれはシンボルの %記法ですね。
でも別に : で十分ですよね。空白やその他の記号を含むシンボルなんて使った覚えあります?
個人的には %s が %w のシンボル版だったらいいのになぁと思います。
こんな感じに
>> %s(foo bar baz)
=> [:foo, :bar, :baz]
コード量たいしてかわんねーやん。なんて思うかもしれませんが、generator を作るときとかメタプログラミング的に便利だと思うです。
引数を values としたとき、[:<%= values.join(', :') %>] と書くよりも、%s(<%= values.join(' ') %>) とした方が見やすいでしょ。

2010/10/31

Rails3 にて ActiveRecord で数値列の形式バリデーションが機能しない

今日 Rails3 でハマったところ。

環境
・Ruby : 1.8.7
・Rails : 3.0.0
・DB : PostgreSQL
・OS : Ubuntu 10.04

手っ取り早く試すために scaffold で
% rails g scaffold products name:string price:integer

こんなマイグレーションになる。
class CreateProducts < ActiveRecord::Migration
  def self.up
    create_table :products do |t|
      t.string :name
      t.integer :price
 
      t.timestamps
    end
  end

  def self.down
    drop_table :products
  end
end
バリデーションを設定する
class Product < ActiveRecord::Base
  validates :price, :presence => true, :format => { :with => /\d+/ } # 数値だけ入力可
end
これで、ブラウザから http://localhost:3000/products にアクセスし、新規にデータを作成する。 その際、name : 'test', price : aaaa と不正な値を入力すると、当然 Invalid price にな・・・・・・らない!!! なんと price が 0 で登録が成功してしまう。 実際 rails c として下記を実行するとよくわかる。
irb(main):001:0> p = Product.new
=> #<Product id: nil, name: nil, price: nil, created_at: nil, updated_at: nil>
irb(main):002:0> p.price = 'aaaa'
=> "aaaa"
irb(main):003:0> puts p.price
0
=> nil
ちなみに 100aaa を price に代入すると price は 100 になる。数値じゃない文字は無視してるのか? フォームで数値の形式バリデーションを行いたいなら ActiveModel を使うしかないのか?
class ProductForm
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Validations

  attr_accessor :name, :price
  validates :price, :presence => true, :format => { :with => /\d+/ }
end
こんな感じのフォーム用モデルを作成すれば、price に aaaa を入力して検証するとエラーになる。

というわけで、ちゃんとした web アプリを作るなら、scaffold のように ActiveRecord のインスタンスを form_for に使うわけにはいかないだろう。
ActiveModel で便利になったんじゃなくて、ActiveModel が必須になっただけなんじゃないだろうか。

しばらく Rails に触ってなかったので、これが Rails3 からの挙動かどうかはわからない。
確か 2.0.2 とかのころは違ったと思うんだけど。
DB にはいろいろな型を利用できるが、Web から入力されたデータは全て文字列。
当然どこかで変換する必要はある。
そして「正規表現は文字列を対象にするものなので、数値列の検証に利用すべきでない」というのも理解できる。
どこまで自動的に内部で変換するのか?いつ変換するのか?あたりの問題なのかな?
ともかく文字列を数値に変換してくれるのはありがたいが、数値にならない文字を切り捨てるのはやりすぎだと思う。
これは ActiveRecord がより DB のレイヤに近づいたということなんだろうか。

[追記]
無視してるというか to_i の仕様ですね。

2010/10/21

私が Google Chrome を使う理由

今日 Google Chrome のバージョンアップがきていたので、早速アップデートしておいた。
せっかくだし、なぜ Google Chrome を使うのかをアウトプットしておきたいと思う。
開発用マシンには一応、IE, firefox, Opera, Safari, Chrome と入っているが、Chrome 以外は表示確認にしか使わない。(Windows 用 Safari での表示確認にどこまで意味があるかはわからないけど)

1.高速であること
相変わらずブラウザは描画や JavaScript の高速を競い続けている。
当然競い続け、進化し続けるのはありがたいことなんだけど、それなりのスペックのマシンを使っているので、もはや体感では「どれも速いよ」としか思わない。
なので、他のブラウザでもいいのだけど立ち上がりも高速なので速度のバランスはかなりいいんじゃないだろうか?
重要な点ではあるが、他より優れているというほどではないと思う。

2.拡張機能
firefox ほどの柔軟さはないにしろ、基本的には十分満足行く拡張機能がそろっていると思う。
むしろ、インストールして再起動する必要がない、バージョンアップで互換性云々言われたことがない、といった点の方がありがたい。
次期 Opera ではとうとう拡張機能が加わるそうだけど、どれほどのものになるんだろうか?

3.同期
個人的にはコレが一番大きい。
ブックマークの同期など、ツールを使えばできたが Chrome では設定も自動入力も拡張機能の同期までとれる。そして何もツールを使う必要がない。
つまり、Chrome をインストールしたその時からほとんどの設定を引き継ぐことができる。
どっかで更新すれば、別の場所でもすぐに反映される。
自宅マシンと職場のマシンの同期はもちろんのこと、開発環境を仮想環境で作る自分にはとてもありがたい。
新しいマシンに設定ファイルを移行する必要がないのも楽でイイ。
ただ、拡張機能の設定も同期取ってくれないかなぁ。

4.シークレットモード
別にやましい物を見るだけがシークレットモードの使い道じゃないわけで。
拡張機能などをとっぱらった状態や、クッキーなどのプロファイルデータを削除した状態を簡単に作り出せるのは便利。
ログイン時の表示と未ログイン時の表示を同時に比較できるので、アプリの表示テスト時などに便利である。

5.シンプルなUI
ウィンドウタイトル部分とタブ表示の合体、検索ボックスとナビゲーションの合体。
通常状態で Chrome より表示領域を広く確保するのはかなり厳しいだろうね。
あと、拡張機能も勝手に動いてるか、1,2カ所にアイコンが出てくるだけなので統一感があっていい。
firefox ではあっちこっちにかってに配置されたりする。(はてブは右下、colorzilla は左下とか)

ま、それと GMail に Google Reader に Google Calendar と Google のサービスに依存しまくりなので、Chrome が一番それらサービスを使いやすいだろうということもある。
その他のブラウザが差別的・意図的にじゃなくても Google のサービスが使いにくくなるようなバージョンアップをしてしまうことがあっても、Chrome だけはそれはないだろうからね。

firefox や Chrome が頑張ってくれたおかげで、Web はイイ方向に転換しどんどん使いやすくなった。ありがたいことだ。

しかし、今回のバージョンアップで何が変わったんだろうか?
正直メジャーバージョンアップにしては変更がマイナーすぎないだろうか?

2010/10/15

これは迷う・・・

au秋冬モデル情報判明。写真も流出。IS04、IS05、IS06の発売は12月下旬以降。Androidタブレットもあり

これは本当だろうか?
IS03 が Android 2.1 なのに一ヶ月後に 2.2 のを出すかなぁ?
本当だとしたら IS03 の強みは一ヶ月早く手に入ることか?
カメラと防水の IS04 か、最新OSの IS05 か非常に迷う。
18日が楽しみだ。

Rails3でのロケールファイル

第16回: Devise によるユーザー認証機能の日本語化(2) - Ruby on Rails 3.0 日記 - Ruby on Rails with OIAX

タイトルこそ Devise の日本語化っぽいけど、Rails3 でどのようなポリシーでロケールを設定するかが記載されている。
参考になる。

2010/10/05

Google Chrome の GMail で等幅フォント

Thunderbird もいいけど、ブラウザの使う GMail でかなり十分な気がしてきた。
キーボードショートカットなどを使えばメーラより高速に使えるし、プラットフォームを選ばない。
いや、今更だけど。
でもメールは等幅フォントで見たい。
というわけで、Chrome の GMail で等幅フォントで見ることができる方法を調べた。
だいたい以下の3つかな?
Gmailを固定ピッチの等幅フォント(MonoSpace)で表示する方法(2009年03月版) [C!]
Gmailのフォントを細かく設定できるGreasemonkey「Gmail Fonts Manager」 [C!]
Gmail Fixed Width Text - Google Chrome 拡張機能ギャラリー
どれも結局はただの JavaScript だけど、結局最後のヤツにした。
設定できるという上では Gmail Fonts Manager の方がいいかもしれないけど、拡張機能ギャラリーに登録されている専用感がよかっただけ(笑)文字のサイズとかブラウザの設定でどうとでもなるし。

いやーしかし、メールが等幅じゃないってだけでいらっとくるもんだねぇ。
心が狭い

2010/10/04

Rails3で汎用検索機能を作る

業務アプリでは CRUD 以外で必ずと言ってもいいほど実装する機能があります。検索です。
検索機能って、たいていはページの上部に検索フィールドがあって、入力して検索ボタンを押すとページの下部に検索結果が表示される。
こんなのばっかりです。
それを毎回ページ全体をゴリゴリ作るって疲れませんか?
Rails で scaffold すると index は一覧表示になりますが、ここが検索になる画面のほうが圧倒的に多くないですか?

というわけで、汎用検索機能(というか簡易フレームワーク)を作ろうってのが今回の趣旨です。
大体、検索機能で検索ごとに違うのは大まかには下記の三つでしょう。
・検索フィールド
・検索ロジック
・結果表示(一行分)
極力この三点に注力できるようにしたい。
具体的には、検索条件は汎用的なコンテナクラスに格納する。
コンテナクラスは、検索条件だけを格納できるように form_for で利用できるようにしたい。
そうすれば、他にどんなパラメータがあっても params[:form] みたいにして検索条件だけをいつでも取得できる。
検索の通信は AJAX で単一のコントローラに飛ばすことにする。
そして検索を実行するロジッククラスだけ実装すればいいようにする。
各コントローラに検索アクションを作るとなると、たとえ共通化していてもどうしてもお約束的なものを書かざるをえない。
何検索を行うかは、クエリ文字列にモードとして埋め込むことにする。

まず、汎用検索条件格納クラスをつくる。
検索条件というカテゴリのパラメータだけ格納したいので、form_for で使えるモデルクラスを作る。
# -*- coding: utf-8 -*-
# 検索パラメータを格納する汎用クラス
class Q
  # model_name を実装してくれる。これがないと form_for できない
  extend ActiveModel::Naming
  # to_key などを実装してくれる。これがないと form_for できない
  include ActiveModel::Conversion

  # オブジェクトを初期化する
  # 内部にパラメータ用のハッシュを持つ
  def initialize(params = {})
    @params = params || {}
  end

  # 指定のキーで格納している値を取得する
  # キーは文字列でもシンボルでもよいが、内部ではシンボルで保持している
  def [](key)
    @params[key.to_sym]
  end

  # 指定のキーで指定の値を格納する
  # キーは文字列でもシンボルでもよいが、内部ではシンボルで保持している
  def []=(key, value)
    @params[key.to_sym] = value
  end

  # ActiveModel::Conversion を include するために必要
  def persisted?
    false
  end

  # メソッドが存在しなくてもいいようにオーバーライドする
  def respond_to?(name, priv=false)
    true
  end

  # メソッドでアクセスされた場合、ハッシュから値を取得する
  # 代入メソッドの場合、ハッシュに値を格納する
  def method_missing(name, *args)
    if name.to_s.ends_with?('=')
      @params[name.to_s.chomp('=').to_sym] = *args[0]
    else
      @params[name.to_sym]
    end
  end

  # to_s をオーバーライド
  # 内部に格納しているパラメータをハッシュ形式で出力する
  def to_s
    @params.to_s
  end

  # 内部に格納しているパラメータをクエリ文字列形式で出力する
  # ただし、内部のハッシュが空の場合は空文字を出力する
  def to_query_string
    kvs = @params.map do |k, v|
      "q[#{URI.encode(k.to_s)}]=#{URI.encode(v.to_s)}"
    end
    if @params.length == 0
      ''
    else
      '?' + kvs.join('&')
    end
  end

  # 指定のキーの値をキーごと削除する
  def delete!(key)
    @params.delete key.to_sym
  end
end
なんでこんなクラスを作ったかというと、毎度毎度検索フォームモデルクラスを作るのが嫌だったから。
もちろんWEB+DB PRESS vol.58で作られているような、検索フォームクラスを作ってもいいんですが、それだと検索機能の数だけモデルを作らなければならない。
また、フォームクラスの属性定義と、form_for でのフィールド定義で二重の定義を行わなければならない。
検索条件はフォーム主体でいいと思うので、こんなクラスを作った。
クラス名はクエリ文字列にしたときにできるだけ短くしたかったので、一文字で。q なら Google などでも使われているし、クエリということが解りやすいだろうから。
ほんとは delete メソッドを作りたくなかった。
というのもどのようなパラメータ名で値を飛ばしても大丈夫なように極力特別なメソッドは実装したくなかった。
しかし、ページングやソート機能を実装しているとどうしても削除が必要になった。
! 付けたパラメータはまず使わないだろうと思ったのと、キー削除してるし破壊的だよなということで ! をつけた。

次は検索ロジッククラスのジェネレータを作ろう。
% rails g generator finder

lib/generators/finder/finder_generator.rb
# -*- coding: utf-8 -*-
# 検索ロジッククラスを作るジェネレータクラス
class FinderGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)

  # 各種ファイルを作る
  def create_finder_files
    template 'finder.rb', File.join('app/finders', class_path, "#{file_name}_finder.rb")
    template 'form.html.erb', File.join("app/views/search/#{file_name}", class_path, '_form.html.erb')
    template 'result.html.erb', File.join("app/views/search/#{file_name}", class_path, '_result.html.erb')
  end
end
lib/generators/finder/templates/finder.rb
# -*- coding: utf-8 -*-
class <%= class_name %>Finder
  # 検索を実行する
  def find(q)
    return nil unless q
  end
end
lib/generators/finder/templates/form.rb
# からっぽ
lib/generators/finder/templates/result.rb
<table id="<%%= q[:mode] %>_result" class="grid">
  <thead>
    <tr>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
  <%% result.each do |record| %>
    <tr>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  <%% end %>
  </tbody>
</table>
正直、result.rb も適当である。どうせデータによって変わるので。 これでこんな感じで、そのモード専用の検索ロジッククラスと検索条件フォームと検索結果表示パーシャルファイルができるようになる。
% rails g finder mode
次は検索コントローラを作ろう。
class SearchController < ApplicationController
  def index
    @q = Q.new(params[:q])
    finder = get_finder(@q.mode)
    @search_result = finder.find(@q)
  end
end
application_controller.rb に get_finder メソッドを実装する。
protected
  def get_finder(mode)
    eval("#{mode.classify}Finder.new")
  end
次は app/views/search/index.rjs を作る。 検索結果の表示は search_result という div の中を書き換えるだけだ。
if @search_result.nil? || @search_result.length == 0
  page[:search_result].replace_html :partial => 'search/not_found'
else
  page[:search_result].replace_html :partial => "search/#{@q[:mode]}/result", :locals => { :q => @q, :result => @search_result }
end
app/views/search/_not_found.html.erb はとりあえず「見つかりませんでした」とだけいれておけばいい。 jQuery を使っている場合はこれだとうまくいかなくて、別途対応を入れる必要がある。 それはまた別のエントリで。 検索画面自体は、ほとんどが上部に検索フィールド、下部に結果表示なのでその枠組みも用意しておいたほうが楽かもしれない。 app/views/search/_base.html.erb を作ろう。
<!-- 検索フォーム -->
<%= form_for @q, :url => '/search', :html => { :method => :get }, :remote => true do |f| %>
  <%= f.hidden_field :mode %>
  <%= render "search/#{@q[:mode]}/form", :f => f %>
  <%= f.submit '検索' %>
<% end %>

<!-- 検索結果 -->
<div id="search_result">
</div>
おっと、ルーティングの設定を忘れていたね。/search だけでアクセスできるようにしたい。
match '/search' => 'search#index'
おおむねこんな感じでokだろう。 たとえばユーザ検索画面を作りたい場合。 app/controllers/users_controller.rb
def index
  @q = params[:q] ? Q.new(params[:q]) : Q.new(:mode => 'user')
end
app/views/users/index.html/erb
<%= render :partial => 'search/base', :mode => 'user' %>
これだけで枠組みはオーケー、あとは rails g finder user で作成されたファイルだけ実装すればいい。

今後はこれに、ソート機能とページングの機能を共通化として追加してみるよ。
正直スマートな方法じゃないかもしれないし、RESTful じゃないかもしれないけど、検索を集中化するって結構便利だと思う。
のちのち様々な直接ダウンロード機能を実装する場合などには管理しやすくなるかも。

Ruby で UUID

Ruby で UUID を使うには uuidtools という gem を使えばよいらしい。
uuid という gem もあるけど、uuidtools の方がメンテされてるとか。
ちなみに使い方
require 'uuidtools'
UUIDTools::UUID.random_create.to_s
=>"7983d06a-f0b9-45a1-aa81-3b2024ec79a7"

2010/10/02

Ubuntu の Chrome で css が反映されない

掲題通り、少し前から Ubuntu での Chrome で css が読み込まれておらず、あらゆるサイトがだっさい見栄えになってた。
シークレットモードにすると、正しく表示されるのでなんらかのプラグインが悪さをしているんだろうと思い、調べてみるとどうやら AdThwart が悪さをしているようだ。
ただ、どの設定を見ても Windows の Chrome と同じ設定なのだ。
もちろん Windows 上の Chrome では全く問題なくサイトが表示されるので、原因不明である。
仕方ないので、もういいやと AdThwart をアンインストールすることにした。
対して恩恵にあずかっている実感もなかったし。

2010/09/29

Rails3 でオレオレジェネレータ

今作成している Rails アプリでは、ビジネスロジック層として ***Service なんてクラスを導入している。
とはいっても仕組みは非常に単純で、ハッシュでパラメータを受け取って、処理結果のオブジェクトを返すだけ。
毎回ファイルを作るのはめんどくさいので、ジェネレータを作る。
まずはコンソールにて
% rails g generator service
とすると、RAILS_ROOT/lib/generators/service が作成されて、その中には service_generator.rb と templates ディレクトリができる。(あとUSAGEファイル)
まずは、service_generator.rb をいじる。
初期状態がこう。
class ServiceGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)
end
編集結果がこう。
class ServiceGenerator < Rails::Generators::NamedBase
  # テンプレート検索のパスを追加
  source_root File.expand_path('../templates', __FILE__)

  # controller のように引数に対応
  argument :processes, :type => :array, :default => [], :banner => "process process"

  # ファイルを作成する
  def create_service_files
    template 'service.rb', File.join('app/services', class_path, "#{file_name}_service.rb")
  end
end
次に templates ディレクトリに service.rb を作る。
class <%= class_name %>Service < ApplicationService
<% for process in processes -%>
  def <%= process %>(params = {})
  end

<% end -%>
end
まあ、99% controller のジェネレータのぱくりです。
これだけで、下記コマンドが実行できます。
% rails g service test foo bar
      create  app/services/test_service.rb
% rails destroy service test
      remove  app/services/test_service.rb

ちなみに、service_generator.rb のメソッドですが、定義してあるメソッドを実行するだけみたい。
def hoge
  puts 'hogehoge'
end
なんてメソッドを service_generator.rb に追加すると、generate や destroy するたびに実行されて hogehoge が表示されます。

hook_for なんかをつかって spec を同時に生成するようにもしたいけど、ちょっと調べる時間が足りない。
とりあえず hook_for :test_framework はダメでした。

2010/09/23

rails3 でアプリ作るときに最初にやったこと

rails3 でアプリケーションを作る際に、最初にやったことをメモ。
jQuery, RSpec, PostgreSQL で作りたかったので、その環境作り。

◆初期設定
# jQuery, RSpec, PostgreSQL を使う
% rails new [app_name] -J -T -d postgresql
# いらないファイルを削除
% rm public/index.html
% rm public/images/rails.png
% rm .gitignore
% rm lib/tasks/.gitkeep
% rm public/stylesheets/.gitkeep
% rm public/javascripts/.gitkeep
% rm vendor/plugins/.gitkeep
# ジェネレータのテンプレートをコピー
% rake rails:templates:copy
# いったんコミット
% svn add *
% svn commit -m "initialized"

◆Subversion の ignore 設定
% svn remove log/*.log
% svn propset svn:ignore "*.log" log
% svn propset svn:ignore "*" tmp/cache/
% svn propset svn:ignore "*" tmp/sessions/
% svn propset svn:ignore "*" tmp/sockets/
% svn propset svn:ignore "*" tmp/pids/
% svn propset svn:ignore "*" tmp/sockets/
% svn propset svn:ignore "database.yml" config/

◆database.yml を編集(中身省略)

◆jQuery を導入
・Gemfile に gem 'jquery-rails' を追加
・インストール
% rails g jquery:install
      remove public/javascripts/controls.js
      remove public/javascripts/dragdrop.js
      remove public/javascripts/effects.js
      remove public/javascripts/prototyle.js
      create public/javascripts/jquery.min.js
      create public/javascripts/jquery.js
      create public/javascripts/rails.js
-J オプションで作成したから存在していないけど、prototype 関連のファイルを削除し、jQuery で使用する js ファイルが作成されてます。

◆RSpec を導入
・Gemfile に下記設定を追加
group :development, :test do
  gem 'rspec', '>= 2.0.0.beta.22'
  gem 'rspec-rails', '>= 2.0.0.beta.22'
end
・インストール
% rails g rspec:install
      create .rspec
      create spec
      create spec/spec_helper.rb
・config/application.rb に RSpec を使用することを宣言
module [app_name]
  class Application < Rails::Application
    # ...

    # Using RSpec for testing framework
    config.generators do |g|
      g.test_framework :rspec
    end
  end
end
◆devise を導入 ・Gemfile に gem 'devise', '1.1.2' を追加 ・インストール
% rails g devise:install
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml

===============================================================================

Some setup you must do manually if you haven't yet:

  1. Setup default url options for your specific environment. Here is an
     example of development environment:

       config.action_mailer.default_url_options = { :host => 'localhost:3000' }

     This is a required Rails configuration. In production it must be the
     actual host of your application

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root :to => "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>
===============================================================================
・1, 2, 3 のうちとりあえず 1 だけ設定しておく

redmine で日付が表示されなくなった

まず、redmine を動かしている環境で rails3 へのアップデートをしたら、redmine がエラーを吐くようになった。
原因は i18n が更新されたかららしい。
freeze で固定されるのは rails 周りのバージョンだけだったっけか。
というわけで、コチラを参考に app/helpers/application_helper.rb にメソッドを追加。
するとエラーは吐かなくなった物の、日付が一切表示されなくなってしまった。
これはどうやら Setting.date_format が nil だからのようだ。
redmine で [管理] >> [設定] >> [日付の形式]を "規定の言語の設定に従う"のままだとこうなるようだ。
日付の形式を yyyy-mm-dd の形式に指定したら、表示された。

2010/09/22

メタプログラミングRuby

最近の電車のお供はメタプログラミングRubyである。
素晴らしい内容でRubyの黒魔術的なテクニックがわかりやすく、論理だって説明されている。
後半はActiveRecordのコードリーディングに近い内容で、これまた非常に勉強になる。

ただ一つ気になるのが、ちょくちょくアニメ?系のオタクくさいネタが盛り込まれている。
訳者の趣味なのかもしれないが、「ジャッジメントですの!」とか「恐ろしい子」とか正直うすら寒い。
フレーズはネット上で目にするものの、アニメに興味がなく元ネタをしらない私だからだろうが。
原著がこういうノリ(もちろんネタは違うだろうが)なら仕方ないが、どうなんだろう?
個人的には技術書でこういうのは好きじゃない。
ネタ仕込むにしても、もっと一般受けするネタあるだろうに・・・

でも内容は素晴らしいのでRubyやらない人にも学びある一冊だと思う。

2010/09/20

Rails3.0 でログファイルのパスを取得する

environment.rb などでログファイルのパスを取得したい場合ってあるよね。
開発環境でのログのローテーション設定とかね。
Rails 2.x ではログファイルのパスは config.log_path で取得できた。
Rails 3.0 では deprecated になったようで、paths.log を使えと警告される。
ところが、単純に paths.log ではパスは取得できない。
paths.log の実体は Rails::Paths::Path というクラスのオブジェクトなので、直接パスの文字列は取得できない。
to_s しても無駄。
で、どうすりゃいいのかと API 見ていると path という属性がある。
これだーと思って、paths.log.path としても nil が返ってくるばかり。
何でだーと思って、p paths.log とかしてみると、paths 属性にパス文字列の配列を持っているようだ。
というわけで、ログファイルのパスを取得するには paths.log.paths[0] としなければならないようだ。
読み取り専用の path 属性とかあれば、普通そっちだと思わないかい?

2010/09/19

関西風手打ちうどん

最近恵比寿に仕事場が一時的に変わりました。
恵比寿は食べるとこが多いのでちょこちょこ探索してます。

で、先日行ってきたのが関西風手打ちうどんのお店。
関東にある黒くない出汁のうどん屋はほとんどが讃岐うどんのお店なので、関西風は珍しいのです。

この時食べたのはきのこ丼のうどんセット。
関西風うどんは讃岐うどんよりももっちりしてる。
讃岐うどんの腰のあるシコシコ感もいいけど、久しぶりのもちもちうどんもうまいわー。
太さが不揃いなのも手打ち感があっていいね。

これで800円ならまあいいんじゃないかと。恵比寿だし、他で食べてもこれぐらいいくからなぁ

2010/09/14

アテ作り

毎回サラミばっかり買ってては酒のアテ代もバカにならないと思い思案してみた。

手軽に作れて出来れば栄養あるほうがいい。

というわけで浅漬けを作りだした。
キャベツと白菜とキュウリ。
それの浅漬けの素。

仕事の都合でキャベツだけ先に作ったのでお味見。
なかなかイケるじゃあないか。
これで夕食がわりの晩酌でも健康的に飲めるな。

まあキャベツ、白菜、キュウリの栄養なんてしれてるけどな

2010/08/28

ダニ纖滅作戦

しばらくぶりの日記である。

お盆に両親が来て鎌倉案内したり
鎌倉の後に箱根で温泉入りたいと言ってたので富士山が見える露天風呂のホテルを予約したら、濃霧で富士山どころか10m先すら見えなかったり
八月三回目のサーフィン行ったり
事務所のベランダから仕事の合間に花火大会見たり

忙しいながらもかろうじて夏らしく生きてます。

そんなに忙しくしていたら、家の中がおろそかになってたのか、どうやら座椅子が虫の一大要塞となっていたらしく、太ももの裏側だけめちゃ虫に食われてかゆいのなんの

布団のシーツとかは定期的に洗ってるので座椅子しか有り得ない!

ということで昨日の休みに纖滅作戦を決行した。
まずは近代兵器ダニアースを買ってきて外部攻撃。これ以上の侵入を許さない。
次にダニアースを変形させ針モードで内部攻撃。籠城なんぞもっての他。
最後にベランダにてお天道様による全体攻撃。のこらず死滅するがいい!!

というわけで作戦は無事終了した。
これでかゆいの治るといいなぁ

2010/08/04

浴衣をクリーニング

昼休みに浴衣をクリーニングに出しに行った。
帯と浴衣で2500円オーバー。
たかっ!!
普段のワイシャツ200円の感覚がベースだからそう感じるだけか。
てかワイシャツは安すぎるなあ。
家のそばのクリーニング屋なら100円だし。
ちょっと差がありすぎるわ

2010/08/03

サーフィン初体験

昨日は休みを利用して朝からサーフィンの体験レッスンへ。

朝は怪しかった天候も九十九里につく頃にはすっかり快晴。
人生初のスウェットスーツを苦戦しながら着用し、いざ浜辺へ!

浜辺がきれい!横浜に引っ越して、初めて湘南に出たとき海と浜辺の汚さにがっかりしたもんだが、九十九里は浜辺がきれいで広くていいなぁ。
カモメが青空を優雅に飛んでいるのも絵になるわー

さて肝心のレッスン。
・用語などの基礎知識のお勉強
・基本の姿勢と波を掴むする練習
・波を掴んでから板に立つ練習
こんな感じで約三時間ほど

なんとか立つコツが掴めた感じかなぁ。
バランスとったり細かい所は難しいけど、やってることは難しくない。
後は慣れなのかな

また行きたいなぁ。
いやー今年は夏らしい事がやれたぞ。

2010/08/01

scala-2.8.0.final on Windows7 64bit

Windows7 64bit に scala-2.8.0.final を設定したのでログ残し。
  • まず、ここから scala-2.8.0.final.zip をダウンロード
  • ダウンロードした zip ファイルを C:\scala\scala-2.8.0.final として展開
  • 環境変数 JAVA_HOME が設定されていることを確認
  • 環境変数 JAVACMD に java を設定
  • 環境変数 SCALA_HOME をC:\scala\scala-2.8.0.finalに設定
  • 環境変数 PATH に %SCALA_HOME%\bin を追加
これで動く。

はずなんだが、環境によるとコマンドプロンプトで scala のREPLを起動させた場合、「java.exeの使い方が誤っています」というエラーメッセージが出る場合がある。
これは、OS が 64bit の場合に出るんだけど、原因は scala.bat の32行目と、JDKインストールされているディレクトリ。
if exist "%JAVA_HOME%\bin\java.exe" set _JAVACMD=%JAVA_HOME%\bin\java.exe
OS が 64bit で x86 用の Java をインストールしている場合、C:\Program Files(x86) 以下にインストールされている場合が多い(デフォルトだから)
この(x86)がクセモノで、丸括弧によってブロックと認識されてしまい、\Java\jdk1.6.0_xx\bin\java.exe だけ単独の命令として扱われてしまう。
対策としては、以下が考えられるかな。
  1. 64bit 用の JDK をインストールする
  2. 32bit 用の JDK だけど、丸括弧の含まれないパスにインストールする
  3. scala.bat と scalac.bat の問題の部分をコメントアウトする。ただし、%HAVA_HOME%\bin にパスが通っていること
ちなみに、俺は 1 でやった。
システム上の都合で、新規に JDK をインストールできないならば、3しかないかなぁ。
環境変数の遅延展開とか試してみたけど、どうも挙動がおかしい。

2010/07/24

暑い

夏が本気を出してきましたね。

もはや夜に窓全開でも暑い。

座ってるだけでじんわり汗が吹き出してくる。

座椅子がたっぷり汗を吸ってる。とりあえずファブリーズで臭いはおさえているはず・・・

夜にシャワー浴びても、朝には汗で気持ち悪くなる。

んでもって朝にまたシャワー。

毎年恒例だけど効率悪い季節だ。

まあ、夏は暑い方が夏らしくて好きだけどね。

しかし、そろそろ扇風機ぐらいは出すべきだな。

2010/07/23

Realforce

仕事用のキーボードをFILCOの黒軸から、東プレのRealforceに変えた。
キータッチに不満はなかったんだけど、やっぱりオフィスでメカニカルはうるさいだろうと思ったので。
FILCOの黒軸は自宅で使おう。
自宅の白軸は売ってしまおう。つっかかる感じがするし、音がおもちゃっぽい。

で、Realforceはいいね。
さすが最高級キーボードなだけあるわ。
キータッチは黒軸に比べて柔らかいけど、打ちやすい。
奥まで押し込まなくていいので、慣れたら指にかかる負担が減るから疲れにくくなるし。
打鍵音は当然静か。これで公害をまき散らさなくてすむな。

2010/07/17

Ubuntu10.04 に NetBeans をインストール

http://ja.netbeans.org/downloads/index.html?pagelang=ja から、言語:日本語、プラットフォーム:Linux(x86/x64)で、すべて版をダウンロード。
$ sudo sh netbeans-6.9-ml-linux.sh
インストール完了。立ち上げてみると、一部の文字が文字化けしている。("ー"が□になっていたりする。)
これを直す。
cd /usr/lib/jvm/java-6-sun-1.6.20/jre/lib/fonts
$ sudo mkdir fallback
$ sudo ln -s /usr/share/fonts/truetype/takao/Takao* ./
これで fallback 用のフォントが登録されたので、再度 NetBeans を起動すると文字化けが直る。
このままだとアンチエイリアスがかからず、フォントが汚い。
$ sudo vim /usr/local/netbeans-6.9/etc/netbeans.conf
    # "netbeans_default_options=..." の最後に "-J-Dawt.useSystemAAFontSettings=on" を追加
さらに NetBeans を再起動。これで見た感じは大丈夫。

とりあえず、rails 開発に NetBeans を試すだけなんだけど。
以前使ってたときは、おおむね問題なかったけど vim の方がサクサクだからすっかり vim オンリーになっちゃったんだよな。
今ならマシンパワーが上がったので、NetBeans に移行する気になるかな?

"version_requirements is deprecated" への対応

Redmine にて Subversion と連動させた。
リポジトリをアクセスのたびに取得するのはうっとおしいので、コミットの自動取得を off にして、cron で自動取得にしている。
crontab はこんな感じ。
00 * * * * cd /var/lib/rails/redmine && ruby script/runner "Repository.fetch_changesets" -e production
で script/runner 実行時に下のような警告が出る。
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement
これが、root からメール転送されてくるので非常にうざい。
なんとかしなければ。
def requirement
  r = version_requirements     # ココ
  (r == Gem::Requirement.default) ? nil : r
end
ココを直せばいいのらしい。
というわけでコチラを参考に config/environment.rb にコードを挿入する。(20行目ぐらい)
# "version_requirements is deprecated" への対応
if Gem::VERSION >= "1.3.6"
  module Rails
    class GemDependency
      def requirement
        r = super
        (r == Gem::Requirement.default) ? nil : r
      end
    end
  end
end
これは rails のバージョンが 2.3.5 で rubygems のバージョンが 1.3.6 以降の時に起こるようだ。
今後のバージョンでは最新の 2.3.8 以降が適用されるだろうから安心か。

2010/07/16

ServerMan@VPSにてRedmine+passengerを設定

ServersMan@VPS に Redmine を導入しましょう。
passenger で動かすので、passenger の導入・設定なども

[passengerのインストール]
% yum -y install httpd-devel
% gem -y install passenger
% /usr/bin/passenger-install-apache2-module
% vi /etc/httpd/conf.d/passenger.conf
    # passenger の設定
    LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
    PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15
    PassengerRuby /usr/bin/ruby

[redmine の配置]
% mkdir /var/lib/rails
% wget http://rubyforge.org/frs/download.php/71530/redmine-0.9.6.tar.gz
% tar zxf redmine-0.9.6.tar.gz
% mv redmin-0.9.6 /var/lib/rails/redmine
% ln -s /var/lib/rails/redmine/public /var/www/html/redmine

[redmine の設定]
% cd /var/lib/rails/redmine
# データベースを作る
% su - postgres
$ createdb redmine
$ exit
# database.yml を作成
% mv config/database.yml.example config/database.yml
% vi config/database.yml
    production:
      adapter: postgresql
      database: redmine
      host: localhost
      username: rails
      password: password
      encoding: utf8
% vi vendor/rails/actionpack/lib/action_controller.rb
    gem 'rack', '~> 1.1.0'   # gem 'rack', '~> 1.0.1'から変更
# マイグレーション前にセッション情報を作っておく必要がある
# 作らずにマイグレーションを行うと下記のようなエラーが出る
# A key is required to write a cookie containing the session data. Use config.action_controller.session = { :key => "_myapp_session", :secret => "some secret phrase" } in config/environment.rb
% rake config/initializers/session_store.rb
% rake db:migrate RAILS_ENV=production
# ログのローテーション設定
% vi /etc/logrotate.d/redmine
    /var/lib/rails/redmine/log/*log {
        weekly
        missingok
        notifempty
        copytruncate
    }

ServerMan@VPSにてSubversion+WebDAVを設定

ServersMan@VPS に Subversion を WebDAV 経由で利用できるように設定する。

[インストール等]
# 本体
% yum -y install subversion
# apache 用モジュール
% yum -y install mod_svn_dav

[設定]
# ベースディレクトリを作成
% mkdir /var/lib/svn
% chown apache:apache /var/lib/svn
% vi /etc/httpd/conf.d/subversion.conf
# ファイル自体はモジュールインストール時点で作成されているため、下記を追加
<Location /svn>
    DAV svn
    SVNParentPath /var/lib/svn
    SSLRequireSSL
    AuthType Basic
    AuthName "svn repository"
    AuthUserFile /etc/httpd/conf/svnusers
    Require valid-user
</Location>
# AuthUserFile を作成する
% htpasswd -c /etc/httpd/conf/svnusers admin

[apache再起動]
% /etc/init.d/httpd restart

[リポジトリの新規登録]
# サンプルとして sample リポジトリを作成
% mkdir /var/lib/svn/sample
% svnadmin create --fs-type fsfs /var/lib/svn/sample
# 所有者変更(再帰)
% chown -R apache:apache /var/lib/svn/sample

[クライアントにて trunk, branches, tags の登録]
# trunk, branches, tags を登録するだけなので temp で行う
$ cd ~/temp
$ svn co https://server/svn/sample
$ cd sample
$ mkdir trunk
$ mkdir branches
$ mkdir tags
$ svn add trunk branches tags
$ svn commit -m "add sub directories"
# 実際に開発するプロジェクトディレクトリに移動
$ cd ~/projects
$ svn co https://server/svn/sample/trunk sample

trunk, branches, tags の初期登録はこんなめんどくさい感じで本当にいいのだろうか?
サーバ側で単純に mkdir するだけでもできるのだろうか?
今度試してみよう

ServerMan@VPSにてWebDAVを設定

ServersMan@VPS に WebDAV を設定しよう。
別に Subversion ができればいいんだけど、ついでと言うことで。

[apache 実行ユーザ・グループの変更]
# デフォルトでは daemon:daemon だけど、使い慣れている apache:apache へ変更
% vi /etc/httpd/conf/httpd.conf
    User apache     # daemon から apache へ変更
    Group apache  # daemon から apache へ変更

[WebDAV設定]
% mkdir /var/www/webdav
% chown apache:apache /var/www/webdav
% vi /etc/httpd/conf.d/webdav.conf
# 中身はこんな感じ
Alias /dav/ "/var/www/webdav/"
<IfModule mod_dav.c>
    DAVMinTimeout 600
    <Location /dav>
        DAV On
        SSLRequireSSL
        AuthType Basic
        AuthName "Login WebDAV"
        AuthUserFile /etc/httpd/conf/davusers
        Require valid-user
    </Location>
</IfModule>
# AuthUserFile を作成する
% htpasswd -c /etc/httpd/conf/davusers admin

[apache再起動]
% /etc/init.d/httpd restart

ServerMan@VPSにてSSLを設定

ServerMan@VPS で Apache に SSL を設定する。
ほぼコチラのままです。ありがとうございます。

[SSLモジュールのインストール]
% yum -y install mod_ssl

[秘密鍵の作成]
% cd /etc/pki/tls/certs
% make server.key
  Enter pass phrase: password
  Verifying – Enter pass phrase: password     # 再入力
% openssl rsa -in server.key -out server.key

[公開鍵の作成]
% openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 3650

[パーミッション設定]
% chmod 400 server.key
% chmod 400 server.csr
% chmod 400 server.pem

[SSL証明書の作成]
% vi /etc/httpd/conf/httpd.conf
    DocumentRoot "/var/www/html"
    SSLCertificateFile /etc/pki/tls/certs/server.pem
    SSLCertificateKeyFile /etc/pki/tls/certs/server.key

[apache 再起動]
% /etc/init.d/httpd restart

ServersMan@VPSを始めた

ServersMan@VPS で開発用に使うサーバを借りたので、環境設定。
とりあえず、Web サーバと Subversion と Redmine をセッティングするのが目的。

まずは環境設定から。
[管理者ユーザの設定]
# 管理者ユーザを追加
% useradd -G wheel admin
# 管理者ユーザにパスワードを設定
% passwd admin
# ついでに root のパスワードも変えておく
% passwd
# 一応 sudo できるように
% visudo
    admin ALL=(ALL) ALL # 追加

[細々した環境設定]
# ホスト名を設定
% vi /etc/sysconfig/network
    HOSTNAME を設定する
% /etc/init.d/network restart
# プロンプトの表示も変えたければ、DTIのコントロールパネルから停止→起動

# ロケールを変更
% vi /etc/sysconfig/i18n
    LANG="ja_JP.UTF-8"  # "en_US.UTF-8"
# 必要ないサービスの停止
% /etc/init.d/saslauthd stop
% /etc/init.d/inetd stop
% /sbin/chkconfig saslauthd off
% /sbin/chkconfig xinetd off

[ssh の設定]
% su admin
# admin ユーザで ssh の設定
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ vi ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ exit
# sshd_config を設定
% vi /etc/ssh/sshd_config
    PermitRootLogion no        # 設定
    PasswordAuthentication no  # 設定

[ここらでいろいろインストール]
% yum -y install gcc
% yum -y install gcc-c++
% yum -y install rpm-build
% yum -y install openssl-devel
% yum -y install zlib-devel
% yum -y install zsh
% yum -y install lv

[RPMforgeの設定]
% wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
% wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
% rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
% rpm -import RPM-GPG-KEY.dag.txt

[checkinstall]
% yum -y install checkinstall

[rubyのインストール]
% wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p299.tar.gz
% tar zxvf ruby-1.8.7-p299.tar.gz
% cd ruby-1.8.7-p299
% ./configure --prefix=/usr
% make
% checkinstall --fstrans=no
% rpm -Uvh /usr/src/redhat/RPMS/i386/ruby-1.8.7-p299-1.i386.rpm

[rubygems のインストール]
# RPM 作った方がいいかもしれないけど、インストールできればいいや
% wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
% tar zxvf rubygems-1.3.7.tgz
% cd rubygems-1.3.7.tgz
% ruby setup.rb

[PostgreSQL のインストール]
# yum のリポジトリは古いので、最新を取得できるように
% wget http://yum.pgsqlrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm
% rpm -ivh ./pgdg-centos-8.4-2.noarch.rpm
% yum -y install postgresql
% yum -y install postgresql-server
% yum -y install postgresql-devel

[PostgreSQL の設定]
% passwd postgres
% su postgres
$ export PGDATA=/var/lib/pgsql/data
$ initdb --no-locale --encoding=UTF8
$ vi /var/lib/pgsql/data/pg_hba.conf
    #host    all         all         127.0.0.1/32          trust      # コメントアウト
    host    all         all         127.0.0.1/32          password    # パスワードアクセスに変更
$ exit
# PostgreSQL をスタートする
% /etc/init.d/postgresql start
% chkconfig postgresql on
# 再度 posgres ユーザになって、パスワードの設定など
$ psql
    postgres-# alter user postgres with password 'password';
    postgres-# create role new_user with login password 'password';
    postgres-# ¥q

とりあえずここまで。
SSL, webdav, subversion の設定は後日。

2010/07/14

スペインGJ!

昨日のお休みは昼は自宅でちょこちょこ作業して、夜は友人とうまいモノを食いに。
というわけで六本木まで出て行って以前行った「いべりこ屋」へ
以前来た時は寿司と鍋だけで生ハムを食べていなかったので、今回は生ハムメイン。
でいきなり生ハムを注文すると「ワールドカップでスペインが優勝したので、生ハムかファーストドリンクをサービスしています」と言われた。
迷うことなく「生ハムで!」と即答。
てか生ハムとドリンクだと値段全然違うよ?
ドリンクなら人数分なんだろうね。
ちなみにこの生ハム、目の前で削ってくれます。
そしてこのお店はボトルキープならぬ「足キープ」が出来るらしい。
入り口に何本か名札の付いた生ハム用の足が陳列してました。
お味はもう最高!
ただでさえ生ハム好きなのに、こんないい肉の生ハムなんて、うまいに決まってる。
溶けるよー、溶けるよー
後はお寿司としゃぶしゃぶ。
しゃぶしゃぶがね、豚肉のくせに全然灰汁がでないの。ビックリ。
寿司は相変わらずの溶け具合だし。
幸せじゃ、満足じゃ
そのうちこの店のメニューを制覇したいわぁ
いやあサッカーでも食文化でもスペインはいい仕事してくれるね

2010/07/13

大人なんだから力の加減ぐらい

譜面台が壊れた。
普段ネジを固めに閉めていたら、ジョイント部分のプラスチックが割れてしまった。
おかげである程度までしか伸ばせない。
座って吹くなら大丈夫だが、立って吹くには長さが足りない。
軽くて気に入っていたのになぁ。
家にはもう一つあるけど、持ち歩くには重い。
基本的にはスタジオで借りられるからいいんだけど。
どうも心配性なのか、必要以上に強く閉めたりすることが多い。
PCのネジとかしっかり閉めすぎて、ネジ山が軽くバカになり、次開けるとき苦労したり。
カチッと鳴ればちゃんと接続されているはずなのに、もう少ししっかり押し込んでみたり。
自転車のタイヤに空気入れていたら加減がわからなくて逆にパンクさせたり。
いかんなぁ。
ちょうどよいとこになると赤いランプが緑になるようにしてほしいわ

2010/07/11

メイドカジノ

家に余ってるPCを職場でサーバとして使えるようにと金曜に暇してた友人を連れて秋葉原へ。
パーツを買って雨の中ウロウロしてると友人がメイドカジノなるお店を発見
面白そうなので入ってみる事に。
まあ普通のアミューズメントカジノでディーラーがメイドさんなんだけど、メイドである必要は全くない。
お客さんもメイド目当てじゃなく普通にギャンブルを楽しんでる。
お客さんも親切で、初めてなゲームにも色々教えてくれた。
2000円で三時間近くいたけど、チップを使い切れず預けて帰った。
メイド産業の中でも健全でリーズナブルなんじゃないかなぁ。ギャンブルにハマらなければ

2010/07/02

夏のバカンスは都会じゃ無理がある

なんか白金高輪のあたりで蛍を観賞できるイベントがあるってーので行ってきたんですよ。
蛍なんて実家をでて10数年見てないから、久々に蛍みて癒やされようと思って。
しょんぼりがっかりだよ!
せまーいプレハブみたいななかにちょろっと蛍が放たれてるだけ。
そして順番に並んだ人びとをまとめて中に入れて、ちょっと観賞して外に出る。
しかも周りが住宅街だから明るいの。
舞鶴のさらに田舎のほうで幼少の頃みた蛍はもっと輝いていた。
街灯しか明かりがない中、たくさんの蛍が飛び回っていた思い出が強すぎるんだろう。
夏に限らず、季節を感じるイベントは都会より田舎だよなぁ
あ、花火だけは都会の方が素晴らしいと思う
あと目の保養も都会の方がいいな(笑)

録画みた

そうか先週で臨場終わったんだっけ
9係も結構おもろいと思うけど、こんな感じだったっけ?
ここまで殺伐としてたっけ?
前回のシリーズはそんなにみてないけど
9係の次は相棒かなぁ

2010/06/25

虫対策

梅雨、そして夏、虫達が活発になる季節がやってまいりました。
虫対策はこれからの時期の死活問題、必須事項。
まずは家中のコンバットを総取り替え。
4個配置してあるから1ケース分おとり換え。
コンバットってすごいよね。
これ使いだしてから一度もヤツらを見たことないと思う。
まあ、きれいにしてるのもあるだろうけど(笑)
内部向けトラップの次は外的に備えなければならない。
ムシコナーズ2ヶ月用を3つ購入。
よく窓を開け閉めする2カ所のベランダと、基本あけっぱの風呂窓に配置。
生ゴミとビールの空き缶は普段から気をつけてるから大丈夫だろう。
後は蚊だな。夏の象徴。
ま、蚊ぐらいなんとでもなるか。
しかし虫対策に3000円以上かかるとは思わなかった

2010/06/23

渡された一枚のカード

今の会社に入社して2/3月がたとうとしたある日、新しく社員が増えた。
2日ほど俺のPCを使ってもらってはいたものの、さすがに業務に支障が出るので、代表から一枚のカードを渡され、勅命を受けた。
「明日、これで新入社員のノートPCを買ってきておいてくれ」と
渡されたのビックカメラのポイントカード。
クレジットカードじゃなく、ポイントカード。(まあクレジットカードじゃないのは当然だけど)
「ポイントたんまりたまってるから大丈夫」と代表は言う。
で、先ほど開店と同時に74,000円もするノートパソコンを購入したわけだ。
レジで堂々と「ポイントで!!」と朝から張り切る俺。
たしかにカードにはポイントがたんまりあった。

5000ポイント・・・

2010/06/16

休日色々

昨日の休日はけっこう動き回った。
まず、区役所に行って実印登録。
親がちゃんとした印鑑を作ってくれたのだ。
んで、郵便局に行って銀行印登録。
当然銀行にも行って銀行印登録。
そのとき、一枚でクレジットカードとキャッシュカードがどちらも使えるカードの勧誘を受ける。
要は手持ちの三井住友VISAカードとキャッシュカードが一枚になるのだ。
先日日記に書いた薄いサイフを使う俺にとっては、カードが一枚減るのはかなり魅力的。
メインクレジットカードだしメインバンクだし弊害はない。
カード番号とか変わるのが面倒だが、通販サイトの登録なんて一回だけだしガマンする。
しかし、ひとつだけ心配が。
ご存知の通り今月から新しい会社になったんだが、この会社はまだ創業二年のまだまだ信用の低い会社。
果たしてゴールドカードの審査通るんだろうか?
そして、関内にでて年金手帳の再発行。
時間かかるかと思ったらすぐできた。
その後、代々木にでで会社に届け物。
徒歩で新宿に出てお買い物。
帰る途中に梅とウイスキー購入。
帰ってから梅酒を漬ける。
今年も無事に漬けることができた。
忙しくしてる間に時期が過ぎたらどうしようかと思った。
おいしくなれよー

2010/06/15

新iPhone

今日予約開始かー
休みだから予約しようかな?
ほんとはAndroidが欲しいんだけどいい機種でんのかね?
auの秋モデルはほんとに期待できるのかねぇ

2010/06/07

妹の結婚式

6/6に妹が結婚した。
親族+αのこじんまりとした式だったけど、そのおかげではしゃぐわけでなく、じんわりあたたかい式だったんしゃないかな?
年に一回会うかどうかの妹が嫁にいったのも、義理の弟ができたことも特に実感はわかない。
俺は色の間、ひたすら写真撮ってた。
父の記念のために父のカメラでバシャバシャ。
その合間に、いとこに送るためにケータイでバシャバシャ。
一生に一度のことだから、記念に残したい。
でも粛々とした式典にシャッター音は無粋。
時代のジレンマを感じるねぇ
何はともあれ、この先幸せになってくれたらそれでいいや。

2010/06/05

帰省中

妹の結婚式のため帰省中。
最近は新幹線でネットつながるのがありがたい。
おかげで友人に頼まれてた作業が完了した。
よい暇つぶしになったし。
電源もついてるしいたせりつくせり。
便利な世の中だ。
写真は季節限定の駅弁。
納涼たこ飯弁当だかそんな感じの奴。
たこ飯も梅ご飯も大好きなのでかなり満足。
さて、今夜は前夜祭。
まあただの食事会だけど。

2010/06/02

転職一日目

昨日付で退職して、今日から新天地。 
業種が変わるとやはり新鮮だ。 
この会社でやるべき事もまあ見えてきたし。 

昨日は月曜日にも関わらず、お客さん総出で送別会をしてくれた。 
ありがとうございました。

2010/05/27

ubuntu の google chrome を beta から安定版にする

進化を続ける Chrome。より速くなった新バージョンを提供します

ということで、linux 版 chrome の正式版が出たので、更新しようと思います。
すでに beta が入っている場合、自動で最新版にはなってくれませんでした。
仕方ないので google から deb ファイルを落として実効してみると、「既に競合するバージョンが入ってるのでインストールできないよ」って言われました。
まずは beta をアンインストールしなけれ>ばなりません。
普通にリンクからダウンロードしてインストールしていた場合、apt で管理されているのでその他のアプリと同様に削除できます。端末から apt-get remove してやりましょう。
sudo apt-get remove google-chrome-beta
apt に登録されているのでインストールも簡単です。
sudo apt-get install google-chrome-stable
beta 使用時に登録していた Extension もばっちり引き継げています。
ご安心ください。

ちなみに、アンインストール後に deb ファイルからインストールしようとすると、「apt に登録してあるんだから、そっちのルートでインストールしたほうがいいよ。」的なメッセージが出ます。親切ですね。

Synaptic で行う場合は、ダウンロード元ボタンを押して stable/main (dl.google.com) を選ぶと簡単に見つかるでしょう。

2010/05/25

送別会

もうそれなりの人が知ってますが、今月末で今の会社を退職します。
転職です。
んでその送別会を土曜日に開いてもらった。
20人ぐらい集まってくれたのだろうか。
全員と話せなかったけど、有り難いことだ。

2010/05/23

CentOS 5.4 で 英語キーボードを使い、CapsLock を Ctrl にする

前回は Windows7 と Ubuntu 10.04 で英語キーボードに変更し、CapsLock を Ctrl に変えたけど、今度は CentOS で同じ事をしよう。
ただし、これはサーバマシンなので GUI なし。
既に root になっている前提。

まずは英語キーボードに変更しよう。
# vi /etc/sysconfig/keyboard
で、KEYTABLE="jp106" になっているのを KEYTABLE="us" にする。
これだけ。

次は、CapsLock を Ctrl に変えよう。
# cd /lib/kbd/keymaps/i386/qwerty
# cp us.map.gz us.map.original.gz
# gzip -d us.map.gz
# vi us.map
で、keycode 58 = Caps_Lock を keycode 58 = Control とする。
そして、us.map.gz を作る。
# gzip us.map

あとは再起動すれば完了。
ちなみに日本語キーボードで CapsLock を Ctrl にしたい場合は、us.map.gz じゃなく jp106.map.gz に対して同じことすればいい。
ようするに /etc/sysconfig/keyboard の KEYTABLE の値に対応したファイルってことですね。

2010/05/21

手頃な英語キーボードを求めて

仕事後に秋葉原まで英語キーボードを探しに行った。
手持ちの英語キーボードは FILCO Majestouch FKBN87ML/EB なのだが、これは6月から仕事で使うため、自宅用にもう一つ英語キーボードがほしかったのだ。
サーバいじったりするときにちょちょいと使うぐらいなので安価なやつでよかったのだが、これが全然見あたらない。
こういうのはあるんだ。
でも、キーの形状が気にくわない。FILCOのと同じがいい。
自宅用なので、正直打鍵感はよほどひどくなければいい。
でもHHKのようなキー配列もちょっと勘弁願いたい。苦手なのだ。
つってもそれって普通やん。
Amazon.comで "keyboard" で検索したらごろごろでてくるやん。
でも、日本では全然見つからない。
あってもMajestouchとかRealforceとかLibertouchとか高いのばっかり。
いや、そりゃそういうの使いたいけどさ、自宅でちょっと用に1万とか2万は今はきついわけですよ。
手頃なお値段のあってもいいやん。秋葉原でぐらい。
ほんと日本では英語キーボードが手に入りにくくなってるよねぇ。
まあ、こんなの好んで使うのって既になれてしまっている人か、我々開発者ぐらいのものだろうから仕方ないんだろうけど。

で、三時間ぐらい歩き回ってパーツショップからジャンクショップまで見て回ったけど、見つからず。
クレバリーにない時点で、普通のパーツショップでは厳しいわな。
そろそろ帰るかと思って、「もうサンワのでいいか、ちょっと使いづらいけど」と思ってソフマップをのぞいてみたら・・・・
ワゴンに「現品限り」でコレがあった。
しかも通常7980円もして、今回の目的だとスルーするお値段なのに、なんとほぼ半額の3980円。
もうこれは天の思し召しとばかりに即購入。
白軸だからちょっとうるさい(個人的には黒軸が一番好み)けど、十分すぎる一品でございます。
粘ってみるもんだねぇ。

しかし、俺 FILCO 好きだな。三つ目か。
今までメインで使ってた FKBT108ML/NB どうしようかな。
今後日本語キーボード使わない予定だし、オクに出してしまおうかな。
生産中止になってるし、意外とほしい人いるんじゃなかろうか?
bluetooth のメカニカルって需要あると思うし。

日本語入力できるようになった

昨日のエントリの Windows で日本語入力ができないというのが解決した。
>・[LayerDriver JPN] の値を [kbd106.dll] から [kbd101a.dll] に変更
これがまずかったようだ。
kbd101a.dll を kbd101.dll にしたら [ALT + `] で日本語入力できるようになった。

日本語キーボードから英語キーボードへ

自宅の環境を日本語キーボードから英語キーボードに切り替えた。
ずっとやりたかったんだけど、仕事で常駐先は当然日本語キーボードだから、なかなか踏み切れなかった。
まあ、今月末までだからそろそろいいかと英語キーボードに切り替えたわけだ。
で、そのときのメモ。

◆Windows7
・regeditを起動
・[HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥i8042prt¥Parameters]へ移動
・[LayerDriver JPN] の値を [kbd106.dll] から [kbd101a.dll] に変更
・[LayerDriver JPN] の値を [kbd106.dll] から [kbd101.dll] に変更(2010/05/21修正)
・[OverrideKeyboardIdentifier] の値を [PCAT_106KEY] から [PCAT_101KEY] に変更
・[OverrideKeyboardSubtype] の値を [2] から [0] に変更
・regeditを終了して再起動

◆Ubuntu 10.04
・[システム]→[設定]→[キーボード]でキーボードの設定を開く
・[レイアウト]タブで[追加]ボタンを押下して[レイアウトの選択]を開く
・[国]を[アメリカ合衆国]に設定し、[系列]を[USA]に設定して[追加]ボタンを押下
・[USA]を上に移動
・[閉じる]ボタンを押下して終了

ついでに、CapsLockをCtrlにしよう。

◆Windows7
・regeditを起動<
・[HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Keyboard Layout]へ移動
・[Scancode Map]と言う名前でバイナリ値を新規作成
・値が下記のようになるように設定
00 00 00 00 00 00 00 00
03 00 00 00 1D 00 3A 00
00 00 00 00 00 00 00 00
・regeditを終了して再起動

◆Ubuntu 10.04
・[システム]→[設定]→[キーボード]でキーボードの設定を開く
・[レイアウト]タブで[オプション]ボタンを押下して[キーボードレイアウトのオプション]を開く
・[Ctrlキーの位置]を展開し、[Make CapsLock an additional Ctrl]を選択
・[閉じる]ボタンを押下して終了

とまあこれで、Windows・Ubuntuともに英語キーボードでCapsLockをCtrlに設定できたのだが、一つだけ問題がでた。Windows7でATOKが起動できない。
[ALT+`]で起動するはず何だが、認識してくれない。
Ubuntuは問題ない。[ALT+`]で日本語が入力できる。
ちなみにVMWareのWindowsXPにも同様の設定を行ったが、こちらも同様。
ただし、ATOKは入っていないため、IMEが立ち上がらないのだが。
仕方ないので、ATOKのバーを外に出し、マウスクリックで切り替えている。めんどくさい。


原因がさっぱりわからない。どなたか親切な人助けてください・・・
解決した(2010/05/21)

2010/05/19

いちご酒の実を引き上げた

今年のいちご酒は残念な色になった。
味もちょっと弱い。
やっぱり漬けた時期が遅く、大味ないちごだったからだろうな。
来年はうまいの漬けてやるからなー

Linux Mint9 が出たらしい

Linux Mint 9 “Isadora” released!

Ubuntu 派生のディストリである Linux Mint の最新版がリリースされた。
きれいで Ubuntu よりちょっと使いやすくなってる。
でも、リポジトリが重い(通信遅い)と思う(Mint全般)
空いた時間に VMWare に入れてみましょ。

2010/05/18

MARVEL 祭り

先月あたりから TSUTAYA で DVD レンタル 4 枚で 1000 円をやってるので、毎週借りまくってる。
これまで借りたのは・・・・

・スパイダーマン
・スパイダーマン2
・スパイダーマン3
・X-MEN
・X-MEN 2
・X-MEN ファイナルディシジョン
・アイアンマン
・デアデビル
・エレクトラ
・ゴーストライダー
・SPAWN
・ジャンパー
・アイ・アム・レジェンド
・チキ・チキ・バン・バン

最後三つ以外全部 MARVEL。
もうほとんどの MARVEL はみた気がする。あとはハルクぐらいか。

一番おもしろかったのは、チキ・チキ・バン・バンだなぁ。
平和でいいじゃないか。
俺の好きな古き良き時代のミュージカルなご都合主義がよろしい。

X-MEN っは完全にウルヴァリンが主人公になってるな。
サイクロップスがリーダーっぽいイメージがあるけど、ヘタレに描かれてるのが残念。
リーダー役はストームがいただいた感じだ。
人気ははるかにウルヴァリンだろうけど。

スパイダーマンはおもしろいんだけど、青春すぎる。
もっと派手にアクションやってほしいわ。
あと、MJ 嫌い。軽すぎる。

アイアンマンはおもしろかった。
ゲームとかでみるたび、デザインだせぇって思ってたけど、CGで動くとかっこよい。
今度映画で2をやるから是非見に行きたい。

デアデビル・エレクトラ・SPAWN・ゴーストライダーあたりは正直よくある感じだったな。
SPAWNあんまり覚えてないや。
エレクトラは中途半端な日本臭さがちょっとなぁ。
デアデビルは敵がしょぼい。
ゴーストライダーは主人公が強すぎて・・・・

アイ・アム・レジェンドは昔 CM でみたときどんな映画なんだろう?ってワクワクした覚えがある。
ところがふたを開けるとただのゾンビ物だったなんて、ちょっとがっかり。
あのとき CM につられなくてよかった。
そういや映画のラストのほかに、別のラストがあってそっちの方がいいらしい。

ジャンパーは結構おもしろかったな。
設定のあたりとか説明不足な気もしたけど。
でも、もっと楽に倒せるだろ、どっちとも!!って感じもしたな。

DVD 4 枚 1000 円セールはいつまで続くんだろうか?
次はスターウォーズを全部見るかな。

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/05/07

変更された Google の検索結果

俺は悪くないと思うけどね。
「日本語のページを検索」がワンクリックで済む。
期間指定、ブログ検索での検索などがすぐにできる。
非常に便利だと思う。

ただ、今まで画面の左端から列挙されてたので、どうしてもまず視点がそこに行ってしまう。
すると、肝心の検索結果でなくサイドバーに視点が行く。
だから邪魔だと感じる人が多いんだろうなと思う。
俺も邪魔とまでは思わないけれど、どうしてもまず視点がそこに行くな。
だから右側に配置してくれたらよかったのにな。

2010/05/01

あのお寺の初夏 ver.

いい天気でチャリで出かけたいなーと思ってたらひらめいた
GWだし初夏だし長寿寺の特別拝観やってんじゃね〜の?
というわけで一路鎌倉へ
さすが大型連休。人も車も多くてチャリには不利だ。
車からも歩行者からも邪魔よね、ごめんなさい。
で、長寿寺に来てみると、ビンゴ!
特別拝観やってました。
初夏の庭もいい感じです。
鎌倉へ行き来する道に面してるけど、庭まで来るとすごく静か。
うぐいすや他の小鳥のさえずりが聞こえる。
しかもこの陽気。
かなりリラックスできます。
庭の後はひととおり回って花を堪能して帰宅。
これでオールシーズン堪能できたかな

2010/04/29

clean day

今日からゴールデンウィーク。
連休初日はやっぱり掃除。

洗濯は、副に加えて布団カバーと毛布。
クリーニングはいつものYシャツに加えて、スーツ全部とコート。
部屋の掃除。
シャワー浴びるついでに風呂掃除。
締めに散髪。

クリーニングと散髪でなにげに一万ほど飛んでいった。痛い。

2010/04/24

とっても豪華なトロンボーンライブ

とっても豪華なトロンボーン奏者が集まるライブがあるって事でバンドの練習後に行ってきた。

宗清洋さん
河野広明さん
中路英明さん
佐藤春樹さん
橋本佳明さん
堂本雅樹さん

バンドでお世話になっている河野さんが「無理してでも来た方がええよ」っておっしゃるのも当然のメンバーですね。
飛び入りも含め最終的には7人に。
レインボーならぬレインボーンですな。

宗清さんは超大御所でなんと1936年生まれの74歳(73かも)
全然見えないです。
やっぱり管楽器はアンチエイジングに効果あるんじゃなかろうか?

一つだけ残念なことが。
トロンボーン6、7人となるとソロ回す数も当然多くなるわけで。
その分、一曲が長い。
まあ長いのはいいんです。
そこでソロバトルとか始まっておもしろいし。
個性豊かなアドリブ聞けて楽しいし。
でも一曲長いため演奏する曲は少なくなる。(ような気がした)
せっかくこれだけ豪華なメンバーなんだから、もっと色んな曲が聞きたかったな。

最後までいたから終電ギリギリになってしまったが、素晴らしいライブでした。

DB マガジン

定期購読を継続した DB マガジンが届いたんだが、段ボール梱包になっていたため、郵便受けに入らず、再配達をしてもらう羽目に。
今回だけならいいんだが、毎回再配達頼むことになると面倒だ。

2010/04/23

大きなタマネギの下で

今日は Earth Day という、地球のことを考えようという日らしく、その日にちなんでいるかどうかわからないコンサートが武道館であった。 
バンドの友人から無料でチケットをいただけたので、行ってきました。 
初武道館!!というかJPOPS系のライブ自体がたぶん初だ。 

メンバーが結構豪華。 
・東京スカパラダイスオーケストラ 
・山崎まさよし(マイミクのあの人が食いつきそう) 
・amin(中国の人、知らない。私まーつーわーじゃなかった) 
。AKB48 
個人的興味はスカパラ6割、まさやん3割、AKB1割ってとこ。 

席がこれまた結構いいところで、二階席だけどちょうどど真ん中。 
舞台中央から真ん前。 
ただ、真後ろが入り口で、開くたび寒いのが難点。 

しょっぱなはスカパラ。 
いやー北原さんすごいわ。 
なんで吹きながらあんだけ動けるんだ。 
昔、トロンボーンの先生が「北原さんの腹筋はやばい」って言ってたのもうなずける。 
初っぱなにホーンセクションってのはいい。映える。 
開会式のファンファーレのような華やかさがあるね。 
前の方の席の人たちは踊り狂ってた。 
結構若者のファンもおおいのねー。かっこいいもんな。 

んで、山崎まさよし。 
俺はこの人は、あの独特の声で聞かせる曲の方が好きなんだけど、基本的にシャウトしてたような気がする。 
というか、メンバー三人なのにスカパラよりもうるさい。 
電子楽器だからか、ギターとベースがずんどこ響く。 
ちょっと騒々しくて苦手。耳にくる。 
でもまあ、POPS系のライブってのはこんなもんなんかもね。 
知ってる曲は一つしかなかった、「雨上がりの夜空に」だったかな? 

で、観客が動く。 
もう用はないと帰る人もちらほらいるが、スカパラとまさやんはスタンディングしているのは女性が多かったが、こっからは俺たちの出番だと言わんばかりに、男集が立ち上がる。 

そう、AAKB48の登場である。 

もうね、AKBみてるよりファンみてる方が楽しいよ。 
俺の目の前は高校生たちで、オタクっぽさは薄いけど、必死。 
振りもどっかオタ芸っぽいw 
ま、とはいえ本質的にはスカパラやまさやんの時の女性も似たようなもんです。 
勢いとか、ノリノリ具合とか。 
せっかくの音楽なのでそれも正しい姿でしょうね。 

んで、初めてみたAKBなんだけど、たしかにかわいい子はちらほらいるが、基本的にわからない、覚えられない。 
途中の MC のノリが内輪っぽくて、よくわからない。 
しかし、パフォーマンスはけっこういいんじゃない? 
歌もノリがいいし、独特な踊りでよく動く。しんどかろうなー。 
あ、仮面ライダーに出てる子がいたのはわかった。 
ってことは天上さんの中の人もいたのだろうか??わからん。 

アンコールは残念ながら、歌ではなかった。 
AKBがでてきてaminが出てきて、まさやんが出てきた。 
スカパラは残念ながら出てこなかった。 
てか、AKBとまさやんが同じステージに立ってるのってなんか異様なきがする。 
AKBにはさまれて、手をつないでお辞儀してたけど、なんか若い女の子の勢いにタジタジって感じだった。ちょっと挙動不審でかわいいまさやんでした。 

こんなコンサートのチケットをタダで提供してくれた友人に感謝。 
こんどお礼しないといけないな。

2010/04/20

天気がいいので長谷寺へ

日曜日、久々に暖かかったのでチャリで長谷寺へ。
いく途中で今まで気づかなかったけど、懐かしいフォルムのポストを発見。
ちゃんと使われてました。
昔は実家の近くにもあったような気がするけど、とんとみなくなったなぁ。
ちなみに北鎌倉あたりにある郵便局は、古都の雰囲気を醸し出す建物です。


で、長谷寺へ到着。
大吉団子を食べながら、景色を堪能。
なんかやたら和装の集団がいた。
どっかのサークルなんだろうか?
海ではもうずいぶんとウィンドサーフィンの帆が見える。
これからどんどん増えていくんだろう。



帰りに鶴岡八幡宮の参道そばのお店で釜揚げ知らす丼。
サラダが無料かつ、お変わりし放題だった。
最近、異常気象のせいで野菜が高いのでありがたい。
ここぞとばかりに三杯ぐらい食ってやった。ごちそうさま。

これからどんどんチャリで遠出するのに最適な天気になりますなぁ。
今月末は冷え込むかも、、、なんて話もありますが。
もうコートをクリーニングに出してしまったので、勘弁してほしい。

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/04/08

スキャナが利用できない

昔から使っている CanoScan LiDE 600F を Windows7 Bussiness 64bit にようやくつないだ。
Windows7 64bit 用のドライバをインストールし、CanoScan Toolbox をインストールしたが、インストール自体は問題なく終了した。
が、いざスキャンを開始すると、CanoScan Toolbox がフリーズして、スキャンできない。
デバッグで立ち上がった Visual Studio によると、StackOverFlow らしい。なんでだ?
先日購入した楽譜を PDF にしたいのだがなぁ。
いい機会だし、ドキュメントスキャナ買ってしまおうかな

2010/04/02

トツカーナ

本日グランドオープンした戸塚駅そばのショッピングモール、トツカーナ。
さっそく、仕事帰りによってみました。
少し前にサクラス戸塚なるものができたけど、こっちの方が駅より近い・でかい。
同じ再開発プロジェクトなので、棲み分けは考えられていて、店舗はスーパー以外かぶらない。
サクラスはTSTAYAとニトリがあるし、トツカーナはファッションや飲食店が多い。
全体で56店舗ほど入ってるんだとか。
有名どころで今まで戸塚になかったものは、無印良品・ミスド・スタバ・ドトールあたりか。
あとなぜか大阪王将が入ってた、けっこう並んでた。そんなうまかったっけ?
有隣堂も入ってたんだけど、品揃えが残念。modiの方は充実しているのでいいけど。
服やら鞄やらファッションの類が、横浜に出ずともかなり選べるようになったのはうれしいな。
いっきに20店舗ほど食べるところができたのもでかい。
サクラスよりも近くて、駅から続きでいけるから、俺の家からみて駅より向こう側だけど、たいしたデメリットじゃないな。
これで、さらに便利になったわけだ。横浜に出る必要がないことも増えていくな。
欲を言うなら、家電量販店と映画館が近くにあれば最高なんだけど。

あ、でもトツカーナって名前はちょっとどうかと思う・・・

2010/03/31

ゆず酒の実を引き上げた

漬けてから2ヶ月たったのでゆず酒の実を引き上げた。
ついでに味見したけど、ちょっと今年はイマイチかも。
まだ酒と馴染みきってない感じ。
蜂蜜感もあんまりしない。
蜂蜜追加するかなぁ。
しばらくは様子見か。

au サン、これはねぇよ

auがスマートフォン発表 シャープ製Android端末など
http://www.itmedia.co.jp/news/articles/1003/30/news033.html

au がスマートフォン出すっていうから期待して待ってたのに。
・Android 12.x じゃないのかよ
・片手で使えないケータイなんていらないよ
・ポケットに入れるのですら厳しいんじゃないの?
・ケータイに QWERTY なんていらないよ
・おサイフケータイついてない
・通話はハンズフリーのみって何だよ
ワンセグとか、

 Androidのアプリケーション開発者向け専用端末の製品化について | ニュースリリース:シャープ
http://www.sharp.co.jp/corporate/news/100330-a.html
でもこっちはいいかも。いろいろ遊べそう。

auのAndroid第2弾、FeliCa搭載へ 秋冬商戦目指す
http://www.itmedia.co.jp/news/articles/1003/30/news037.html
本命はこっちだな。
いや、ほんと頼みますよ。
このニュースみなかったら docomo に変えるところだよ

2010/03/30

なめろう丼

ただいま気温3度。
ありえないだろ!もうすぐ4月なのに。
先日散髪の帰りに行き着け(だった)焼鳥屋に行った。
引っ越してからというもの数ヶ月に一回のペースでしか行けてないなぁ。
で、そこで食べた新メニューなめろう丼。
なめろうといえばアジだけど、焼鳥屋だけに鳥。大山地鶏。
なにこれ、マジうまい。
なめろうだから叩いてネギ味噌と和えただけだろう。
それに刻みノリとうずらの玉子。
これなら家でも作れそうだよなー。
今度やってみるか

2010/03/24

牛久の大仏



いや、近くで見るとほんまにでかい。 
光の加減で残念な写真ですが、大きさはわかるでしょう。 
圧倒されます。 
周りは見渡す限りの自然。 
早い話が何もない。田舎。 
ほんとにこれしかない。とっても異質。 

写真取り忘れたけど、中に入って門をくぐるとき、小さな鐘をついて入ります。 
意外と見落としがち。 



大仏に向かって進むと、今度は門のところより大きな鐘。 
これもつけます。ごぉ~ん。 

さらに進むと、日本一の香炉。なんでも大きいのが好きなようです。アメリカ人か! 


で、鎌倉の大仏のように中に入れます。 
中は、博物館のような感じ。 
売店もあるし、作りも普通の建物。 
絵馬も飾ってあるし、たくさんの阿弥陀如来(お金出せば名前付きで配置してくれるらしい)
なんか、大仏の中にお寺がある感じ。 

ちなみに一般客が上れるのは地上85mまで(だいたい胸のあたり) 
で、ここから外が見えるのですが・・・・・ 
窓と呼べるほどでもない隙間のため、見晴らしは非常に悪い。 
そして、あたりは何もない。遠くに海が見えるぐらい。 
せっかく高層ビルの 27階ぐらいの高さなのにもったいない。 

とまあ、上った景色は残念ですがこのでかさは一見の価値ありですな。 
ちなみに、各種のお花が季節ごとに咲くらしいですが、残念ながらまだ春は来ていないため早咲きの桜が一本のみ。 
初夏、夏、秋には大仏様の足下にいろんな花が錯綜なので、いくならその時期がいいでしょうね。 
特に秋のコスモスがおすすめらしいです。 

と、ひとしきり楽しんだところで時刻は16:20。 
17:00には閉園なので、ささっと外に出てバス停に行くと・・・・最終が16:10。 

え?・・・・え? 

人が来るであろう、土日祝日は17:30のバスがあるけど、平日は16:10が最終。 
閉園時間なんて知ったこっちゃねー。そんな感じ。 
大仏様のお膝元なのに無慈悲きわまりない。 
しかたなく形態のナビ頼りに、駅まで歩くことに。 
10kmだから約二時間かかるらしい・・・・・ 

とぼとぼ・・・・ 
これだけ離れていても大仏様の存在感はすごい。 
無事駅にたどり着けるよう、見守っていてください。 
ちなみに、頭のてっぺんが赤くチカチカしてます。 
飛行機用のアレなんでしょうが、大仏様のてっぺんがチカチカしてるとなんか不気味、 
有事の際には日本を守るために動き出すんじゃないかと。 

しかし GPS ってのはすごいもんだね。 
トラクターで走るような畑のあぜ道みたいな道ものってるんだから。 
そして、最短距離のためには平気でそんな道も歩かせる。 
GPS にアスファルト舗装されていない道を歩かされるとは思わなんだ。 

一時間ほどとぼとぼと歩き、ちょうど半分ぐらいのところでコンビニを発見。 
形態のバッテリが怪しかったので、充電器を購入。 
寒くなってきたので、コーヒーも購入。 
で、コーヒー飲んでさあ、もう5km踏ん張るか!!と思っていたら、ふとバス停が目に入る。 
なんと、ここでは最終バスは20:10ではないか。 
しかもあと10分ほどで、19時代のバスがくる。 
というわけで、充電器買ったことを公開しつつバスで無事帰ることができましたとさ。 

相変わらず無計画だなぁ・・・・