BONNOH FRACTION 13
世の中に寝るより楽はなかりけり
浮世の馬鹿は起きて働く

2007年12月27日(Thu)

ActionController::UrlWriter#url_forを色んなところで使うのは注意

最近、railsで作った自作ブログウェアでコメントが付けられなくなってました。何故かと言うとコメントを受け付けるurlがおかしかったからなんです。

なんでおかしかったか調べてみるとActionController::UrlWriter#url_forActionController::Base#url_forの動作が異なってたから。

ってか、これってrailsのバグなんじゃね!?とか言ってみる。

ActionController::UrlWriter#url_for

ユニットテストから link_to や url_for を使う方法 - Rails で行こう! - Ruby on Rails を学ぶ」や「 83's : url_forが使えないところで使えるようにする」の記事を見る限り、ActionController::UrlWriter#url_forはControllerとView以外でやむなくurl_forが使いたくなった時に利用するモジュールらしい。

ソースコードを見てみると、こんな感じでurlを組み立ててる。

def url_for(options)
      options = self.class.default_url_options.merge(options)
      
      url = ''
      unless options.delete :only_path
        url << (options.delete(:protocol) || 'http')
        url << '://'
        
        raise "Missing host to link to! Please provide :host parameter or set default_url_options[:host]" unless options[:host]
        url << options.delete(:host)
        url << ":#{options.delete(:port)}" if options.key?(:port)
      else
        # Delete the unused options to prevent their appearance in the query string
        [:protocol, :host, :port].each { |k| options.delete k }
      end
      anchor = "##{options.delete(:anchor)}" if options.key?(:anchor)
      url << Routing::Routes.generate(options, {})
      return "#{url}#{anchor}"
    end
  1. options{:protocol] || 'http'
  2. '://'
  3. options[:host]
  4. options[:port]
  5. Routing::Routes.generate(options, {})
  6. "##{options.delete(:anchor)}"

おー、urlが組み立てられてるよー。

ってことで早速自分のクラスでinclude ActionController::UrlWriterしてurl_forしてみました。

ところが、開発環境ではうまくいってたのですが、いざ本番環境で試してみるとうまくいかない。

期待したurlはこんな感じでした。

http://www.fraction.jp/rana3/comment/post

けど、実際に組み立てられたurlはこんな感じ。

http://www.fraction.jp/comment/post

そう、本番環境ではrails用のドメインを作るのがめんどかったのでmongrelの--prefixオプションを使ってrelative_url_rootを利用してたのです。まあ要するに[Rails] Rails の動作環境と Location について - プログラミングは素晴らしいで説明してるようなことをやってた訳です。

ところが、実際に組み立てられたurlがおかしい…。

Yuanying at 11時32分44秒 | Comments (0)

2007年12月26日(Wed)

GPLにするかBSDLにするか

概要

ソースコードをオープンソースとして公開するにあたって、GPLとBSDLのどちらがライセンスとして適当なのかを、ソースコードを公開する作成者の立場でどちらが得かを考える。

今のところの結論は作成者の立場で異なっていて、以下の二つで考えた場合、

  1. ソースコードが個人もしくは一組織の著作物である場合
  2. ソースコードが異なる組織で複数人の著作物である場合

個人もしくは一組織の著作物である場合はGPL/LGPL。異なる組織で複数人の著作物である場合はBSDLが良いと思う。

Yuanying at 17時21分34秒 | Comments (0)

2007年12月21日(Fri)

OS Xをリモートからソフトウェアアップデート

Mac OS X をリモートからソフトウェアアップデートする方法。

リモートにログイン

sshでソフトウェアアップデートしたいマシンにログイン。

$ ssh 192.168.*.* -l yuanying

アップデート

アップデート可能なソフトウェアのリスト

[yuanying@Kohrin Library]$softwareupdate -l
Software Update Tool
Copyright 2002-2007 Apple

Software Update found the following new or updated software:
   * MacminiSMCUpdate-1.0
	Mac mini SMC ファームウェア・アップデート (1.0), 800K [recommended] [restart]
   * MacminiFirmwareUpdate-1.1
	Mac mini EFI Firmware Update (1.1), 1970K [recommended]

softwareupdate -lでアップデート可能なソフトウェアのリストが表示される。

アップデート

[yuanying@Kohrin Library]$sudo softwareupdate -i -a
[yuanying@Kohrin Library]$reboot

sudo softwareupdate -i -aですべてインストールsudo softwareupdate -i -rで推奨されるアップデートのみアップデート。

再起動が必要なアップデートだった場合、rebootで再起動する。

参考

[yuanying@Kohrin Library]$softwareupdate -a
usage: softwareupdate  [ ...]

	-l | --list		List all appropriate updates
	-d | --download		Download Only
	-i | --install		Install
		

Yuanying at 11時01分07秒 | Comments (0)

Macにインストールしているアプリケーション

再インストール時に忘れないように。要メンテナンス!!

システム

コミュニケーション

Web

ユーティリティ

テキストエディタ

開発系

趣味

Yuanying at 15時34分36秒 | Comments (0)

2007年12月20日(Thu)

WindowsでWebKitをビルド 2

WindowsでWebKitをビルドの続き。

ソースコードの入手

最新版のソースコードをsubversionからチェックアウト。これまたなんのひねりもなく、Getting the Codeに書いてあるそのまんま。

Subversionでチェックアウト

おもむろにCygwinのシェルを立ち上げ、ソースコードをチェックアウトしたいディレクトリに移動してチェックアウト。

私は特に何も考えずそのままホームにチェックアウトしてしまったけど結構な量なので気になる人は別にパーティションつくってそこにチェックアウトとかしてる模様。

$ svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit

Webkit Support Libraries のインストール

WebKit Support Librariesをダウンロードして「WebKitSupportLibrary.zip」という名前のまま解凍せずにソースコードをチェックアウトしてきたディレクトリのルートにコピーする。

$ /cygdrive/c/Documents\ and\ Settings/Administrator/My\ Documents/Downloads/WebKitSupportLibrary.zip ./WebKit/

追加ライブラリのインストール

さらに追加のライブラリをインストールするために以下のコマンドを実行する。

$ WebKit/WebKitTools/Scripts/update-webkit

本来はソースコードを最新にアップデートするコマンドらしいが、Windowsの場合は初回時に必ず実行しておかないと依存するライブラリが解決しないらしい。

ビルド

これで準備は終わり。あとはビルドを実行するだけ!

$ WebKit/WebKitTools/Scripts/build-webkit

この手順でやれば特に何の問題もエラーもなくビルドが終了する。何も失敗がないとドキュメント通りになってまったく面白みがないですね!

WebKit を実行してみる

WindowsにSafariがインストールされている場合は以下のコマンドで自分でビルドしたWebKitを使ってSafariが起動する。

$ WebKit/WebKitTools/Scripts/run-safari

さて、一通りビルドが終わって確認したのでソースコードを色々見てみますか…。

Yuanying at 10時20分17秒 | Comments (0)

2007年12月19日(Wed)

BSDライセンスのソースを改変

BSDライセンスのソースを改変してBSDライセンスで再配布した際のライセンス表記例

/*-
 * Copyright (c) 1991 Regents of the University of California.
 * All rights reserved.
 * Copyright (c) 1994 John S. Dyson
 * All rights reserved.
 * Copyright (c) 1994 David Greenman
 * All rights reserved.
 * Copyright (c) 1998,2000 Doug Rabson
 * All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * the Systems Programming Group of the University of Utah Computer
 * Science Department and William Jolitz of UUNET Technologies Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *	from:	@(#)pmap.c	7.7 (Berkeley)	5/12/91
 *	from:	i386 Id: pmap.c,v 1.193 1998/04/19 15:22:48 bde Exp
 *		with some ideas from NetBSD's alpha pmap
 */

確かLGPLかなんだかでソースコードを改変した後に再配布する際には、改変したことを明示する必要があったけれど、

*	from:	@(#)pmap.c	7.7 (Berkeley)	5/12/91
 *	from:	i386 Id: pmap.c,v 1.193 1998/04/19 15:22:48 bde Exp
 *		with some ideas from NetBSD's alpha pmap

こんな感じで書けば良いのか。

Yuanying at 12時49分41秒 | Comments (0)

WindowsでWebKitをビルド

遅ればせながらWindowsでWebKitをビルドしてみた。

環境

  • WindowsXP SP2
  • Visual C++ 2005 Express Edition
  • Microsoft Platform SDK for Windows Server 2003 SP1

上記の環境を VMware Fusion 上に構築してビルド。えらい時間かかって死ぬかと思った。

最近はハマりポイントがつぶされているのかどうかわかりませんが一発でビルド成功、WebKit起動した。先人様々ですな。

開発環境構築

特に変なことをせずInstalling the Developer Tools通りに。安上がりにやるためにVisual C++ 2005 Express Editionを使いますよ。

Visual C++のインストール

  1. Visual C++ 2005 Expressのインストール。
  2. Microsoft Visual C++ Express 2005 Service Pack 1のインストール。
  3. Windows Platform SDKのインストール。
  4. includeパスにC:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include\mfcを追加。

最後のステップはVisual C++を起動した後にメニューのツール - オプション - プロジェクトおよびソリューション - VC++ ディレクトリから以下のように設定。

webkit1.gif

Cygwinのインストール

SubversionやPerlやらビルドに必要なツールをCygwinを利用してインストールする模様。WebKitのビルドに必要なパッケージを揃えた自動インストーラが webkit.org で配布されているのでそれを使ってインストールすると簡単。

  1. cygwin-downloader.zipをダウンロード。
  2. 解凍したフォルダの中に入ってるcygwin-downloader.exeを実行。
  3. 必要なパッケージのダウンロードが終わるとCygwinのsetup.exeが自動で起動するので、「Install from Local Directory」を選択してインストール。

webkit2.gif

すでにCygwinがインストールされている場合は、いくつかのパッケージをインストールしておく必要がある模様。

WindowsでWebKitをビルド 2に続く。

Yuanying at 18時20分11秒 | Comments (0)

2007年12月12日(Wed)

Building a JNI Universal Application with Xcode 3.0

アップルにある「Building a JNI Universal Application with Xcode」というドキュメントがちょっと古くてXcode 3.0(Leopard)だとうまくチュートリアルの通りに進まなかったのでメモ。

Creating the Initial Application

まず、最初からつまづく。なんといってもNew Projectに「Java Swing Application」が見当たらない。出来上がりのアプリケーションから察するにXcode 3.0では単純に「Java Application」と名前を変えているらしい。

jni01.png

プロジェクトの構成

そして一番の問題がプロジェクトがほとんどAnt-basedになっちゃってること。

jni02.png

そのせいで新規にビルドフェーズをXcode上から追加できない。全部自分でbuild.xmlをいじらなくちゃいけない模様。

まあJava開発者ならAntの方が使いやすいだろうという配慮なんだけど私には余計なお世話でした…。

まあとりあえずBuilding a JNI Universal Application with Xcode通りにnativeメソッドをJavaのソースコードに追加して、ライブラリをロードするところまで進める。

Adding the Native Method Declaration and Call

public native String getMyFullName();

Loading the Dynamic Library

static { System.loadLibrary( "MyFirstJNILib" ); }

Yuanying at 13時38分01秒 | Comments (0)

2007年12月11日(Tue)

SWはHWと共にある

非常に当たり前のことなんだけど、ソフトウェア(SW)の進歩はハードウェア(HW)と共にある。

新しいSWは新しいHWと一緒に生まれるとおぼろげながら思い始めたのは、iPhoneやWiiに触ってから。

タッチパネルや傾きセンサ、加速度センサ。これらを組み合わせてみたら色々面白いことができそうだとは思うものの、現実に自分がプログラミングする環境のHWはマウスとキーボード、出力としてディスプレイとスピーカくらい。何か色々制限されているようで閉塞感を感じてる時にGAINERとかいうのを知った。

んでとりあえず解説本を買ってみた。

+GAINER

一章を読んだ時点で最近私が考えてたようなことはとうに昔から考えられていたことだと知った。フィジカルコンピューティングとかいうらしい。中でも、GAINERはデザイナなどのHWに詳しくない人にもHWを扱えるようにした環境のようだ。

どうやら理解がすすめがGAINERとかを使わずに自分で電子部品を色々買ってきてOSネイティブのAPIを使ってHWを色々いじれそうだが、とりあえず回路図とか電子部品とかさっぱりわからないのでGAINERからはじめてみよう。

Yuanying at 10時13分56秒 | Comments (0)

2007年12月08日(Sat)

MacBook Proのメモリを4GBに

メモリの値段が底値という噂を信じて、MacBook Proのメモリを2GBから4GBに換装してみましたよ。

我が軍の、この圧倒的な空きメモり容量を刮目して見よ!!

4g.png

空き、2.04GBって…。

結論

ネットしてメール見るだけならメモリ4GBもいりません。

Yuanying at 15時14分45秒 | Comments (0)

2007年12月07日(Fri)

VMware Fusionで仮想プロセッサ2個モード

143 :名称未設定 :2007/12/06(木) 22:57:53 ID:WPEk4ZXx0
安かったんでFusionかったんだけど、ちょっと重くない?
仮想プロセサ2個モードにすると、よけいに重くなったし・・・
あと、VM使用中はなぜかMacのネットワークが使えなくなる・・・

設定かなにかいるんですかね?
148 :名称未設定 :sage :2007/12/07(金) 15:52:29 ID:VW2pCeNn0
>>143
>仮想プロセサ2個モード
2コアをMacOSとWindowsが奪い合うからかえって遅くなるという話をどこかで読んだような気がする。

149 :名称未設定 :sage :2007/12/07(金) 16:17:36 ID:PYwFUZbB0
現状の仮想化技術だと2CPU設定はクワッドコア以上向け。

Yuanying at 17時55分06秒 | Comments (0)

2007年12月03日(Mon)

RubyCocoa でダウンローダを作ってみる その2

RubyCocoa でダウンローダを作ってみる その1」の続き。

コントローラの登録

InterfaceBuilderから、前回作ったAppControllerをいじれるようにnibファイルにAppControllerを登録してやる。

rubycocoa06.png

ライブラリから、Object(NSObject)を選択して、MainMenu.nibと書かれたウィンドウにドラッグアンドドロップしてやる。これで、nibファイルにとりあえず何らかのObjectが登録された。

つぎに、今登録したObjectをAppControllerクラスに変更する。

rubycocoa07.png

登録したObjectを選択したままInspector (Shift + Command + I)を開き、IdentityタブからクラスをAppControllerに変更する。

以上でnibファイルにAppControllerが登録された。

Yuanying at 10時03分39秒 | Comments (0)

2007年12月02日(Sun)

お酒にまつわる

タダ酒(「純米大吟醸 湊屋藤助630ml」)に惹かれて珍しく独り言を。

といってもお酒にまつわる恋愛話とかいって、書きたくないようなエピソードしか思い出せないんだけど、Dadyさんの「ど〜せなら一緒に恥さらしましょうよ!名前ぁポピンにでもしといて♪」という言葉につられて書いてみよう。

ちなみにDadyさんの恥はソネットブログの、「お酒にまつわる恋のお話 」から読めますよ。

あなたのお酒にまつわる恋愛話を聞かせてください!あなたのお酒にまつわる恋愛話を聞かせてください!

ということで、はじめまして、ポピンです♪

お酒って飲み方間違えると怖いですね、私がお酒を飲んで失敗した思い出したくない思いでは二つあって、一つは冬の夜中の極寒のつくばを、彼女の家から追い出されて駅まで6km歩いたことと、これまたふられてどういう訳かその子の家のインターフォンを思いっきり片手で殴りつけて壊したことですな。

冬のつくばは寒いですよ、それを駅まで6km。なんで夜中の0時に家を追い出されたのかは聞かないでください。

しかし、星は奇麗でしたね!もう二度とあんなことは御免ですが!

そして二つ目のインターフォンを殴りつけた話ですが、これまたなんで殴りつける羽目になったのかは聞かないでほしいですね。

その一部を見ていた友達が私のことを紹介している文章がこれ、

ちなみにこういうことを書いてる本人も普段はおとなしいですが、酔っ払った挙句拳から血を流して我々の前に現れ、いきなり泣き崩れたことがあります。

そうそう、あのとき泣き崩れたんだっけね。

今では良い思い出ですが、これまたもう二度とあんなこと御免ですね。

湊屋藤助の “聞き”酒ブログ キャンペーン実施中!

Yuanying at 00時46分50秒 | Comments (0)

About me

Avator

Mac 好き、自転車好き。日記はほぼ Mac と プログラムに関すること。

Categories