ひさしぶり。
http://www.heroku.com/
Railsアプリを走らせることができるクラウドアプリケーションプラットフォーム (PaaS)。
Google AppEngineのRails版のイメージ。
AppEngineは将来的に自分のサーバでアプリを実行させようと思っても、
実行環境がGoogle様にしかないので、あんまり興味なかった。
でも、herokuなら普通のRailsなので、その気になったら自前サーバに移行できる。
パフォーマンスは、簡単なDBを参照して結果をjsonで返すAPIを作って実行してみたところ、
1 dyno、0 workerで、(つまり最小構成で)、20 qpsでした。
仮に 5 dynosと5 workers買ったら、月324ドル。
占有サーバ1台と同じくらいの値段。魅力的だ。
ログは月に100ドルを払っても 20k lineまでしか記録できないので、
ないものと思った方が良さそうだ。PaaSはこれが難点だよなぁ。
素敵な運用方法がないかしら。
Bundlesという仕組みがあって、アプリやDBをまとめて一つのファイルにバックアップとってくれる機能もある。
heroku内に無料で2つまでしか保持できないが、downloadができるので、
backup → download → destroy を繰り返すといった、運用になるのかな。
こちら
に上記のようなbackupのrakeタスクの例がありました。
ところでBundlesの中身って普通にみえるものなのかしら。少しググったけど分からなかった。
チャンスがあれば、今度のぞいてみます。
2011年3月26日土曜日
2009年1月26日月曜日
Error validating server certificate in svn over https with Redmine
サーバ証明書を受け入れるよう、手動で設定すると回避できます。
http://www.redmine.org/wiki/redmine/FAQ#I-cant-browse-my-svn-repository-through-redmine
RedmineをRoRで動かしているユーザ権限で(As the user who runs Redmine RoR):
http://www.redmine.org/wiki/redmine/FAQ#I-cant-browse-my-svn-repository-through-redmine
RedmineをRoRで動かしているユーザ権限で(As the user who runs Redmine RoR):
$ mkdir -p ~/.subversion
$ svn --config-dir ~/.subversion co https://svn.mydomain.com/project/trunk delete-me
$ rm delete-me
2009年1月21日水曜日
FC4: yum: Cannot find a valid baseurl
古いFedora Coreで以下のようなエラーがでて、yumが利用できない。私の場合は、ひさしぶりにFC4のデスクトップでyum updateしようとしてみたら、発生しました。
# yum update
Setting up Update Process
Setting up repositories
Cannot find a valid baseurl for repo: updates-released
Error: Cannot find a valid baseurl for repo: updates-released
これは公式サイトがもう古いパッケージをメンテナンスしていないのが原因です。なので、/etc/yum.repos.d内にある.repoファイル内のURLを、今でもパッケージを置いておいてくれるサーバに設定すると、とりあえずエラーが直ります。
例えば:
baseurl=ftp://ftp.kddilabs.jp/Linux/packages/fedora.legacy/fedora/$releasever/os/$basearch/
パッケージが古くて更新されていないことには変わりないので、より新しいdistributionを使うようにしましょう
# yum update
Setting up Update Process
Setting up repositories
Cannot find a valid baseurl for repo: updates-released
Error: Cannot find a valid baseurl for repo: updates-released
これは公式サイトがもう古いパッケージをメンテナンスしていないのが原因です。なので、/etc/yum.repos.d内にある.repoファイル内のURLを、今でもパッケージを置いておいてくれるサーバに設定すると、とりあえずエラーが直ります。
例えば:
baseurl=ftp://ftp.kddilabs.jp/Linux/packages/fedora.legacy/fedora/$releasever/os/$basearch/
パッケージが古くて更新されていないことには変わりないので、より新しいdistributionを使うようにしましょう
2008年11月22日土曜日
Google Reverse Geocoder via HTTP
I found the way to call the reverse geocoder via HTTP not Javascript.
http://maps.google.com//maps/geo?output=json&ll=35.66951707239733,139.76800203323364&key=ABQIAAAA9K1YkDoSv7ab5ZNpy7jKoRSNkqYZ2vhDE-J87_S4BEuTB46WEhTQ4bSutMETYeFCAGxideDhBPvI_w
Google 逆ジオコードを直接叩く。
http://maps.google.com//maps/geo?output=json&ll=35.66951707239733,139.76800203323364&key=ABQIAAAA9K1YkDoSv7ab5ZNpy7jKoRSNkqYZ2vhDE-J87_S4BEuTB46WEhTQ4bSutMETYeFCAGxideDhBPvI_w
Google 逆ジオコードを直接叩く。
2008年11月11日火曜日
chumby cross compile
chumbyのcross compile環境を構築する。
x86 Linuxを使っているなら、バイナリパッケージが公開されているので、以下を参照しよう。
http://wiki.chumby.com/mediawiki/index.php/GNU_Toolchain
簡単過ぎです。
試しにopensslをコンパイルしてみる。
$ wget http://files.chumby.com/source/ironforge/build733/openssl-0.9.7l.tar.gz
$ tar xvzf openssl-0.9.7l.tar.gz
$ ./Configure --prefix=/usr/arm-linux linux-elf-arm
$ make CC=arm-linux-gcc RANLIB=arm-linux-ranlib AR="arm-linux-ar r"
$ sudo make install
これで、あれを、chumbyに載せることができる!
x86 Linuxを使っているなら、バイナリパッケージが公開されているので、以下を参照しよう。
http://wiki.chumby.com/mediawiki/index.php/GNU_Toolchain
簡単過ぎです。
試しにopensslをコンパイルしてみる。
$ wget http://files.chumby.com/source/ironforge/build733/openssl-0.9.7l.tar.gz
$ tar xvzf openssl-0.9.7l.tar.gz
$ ./Configure --prefix=/usr/arm-linux linux-elf-arm
$ make CC=arm-linux-gcc RANLIB=arm-linux-ranlib AR="arm-linux-ar r"
$ sudo make install
これで、あれを、chumbyに載せることができる!
2008年7月30日水曜日
2008年6月30日月曜日
How to change the Product ID in Microsoft Office 2008 for Mac
Microsoft Office 2008 for Macでプロダクトキーの再入力
プロダクトキーの情報が入っている設定ファイルを消して、オフィスを起動するとプロダクトキー入力ウィンドウがでてきます。
ターミナルにて:
% rm /Applications/Microsoft\ Office\ 2008/Office/OfficePID.plist
2008年6月19日木曜日
2008年6月4日水曜日
rails openid 2.0
OpenID2.0な昨今、ruby-openidやopenid_login_generatorはそのままでは使えず、OpenID2.0ライブラリに合わせて修正してやる必要がある。
参考:OpenIDライブラリの導入とかrailsでopenid試してみる。 openid_login_generatorでやってみたとか。
参考:OpenIDライブラリの導入とかrailsでopenid試してみる。 openid_login_generatorでやってみたとか。
2008年6月3日火曜日
古いバージョンのrailsを使う
古いバージョンのgem自体は、gem cleanupしない限りは残る。
次のように、第一引数でバージョンを渡してあげると、使用するバージョンを特定できる。
(追記 2008.11.6)
ちなみに、インストールは次のようにバージョンを指定する。
$ gem list rails
*** LOCAL GEMS ***
rails (2.0.2, 1.2.6)
次のように、第一引数でバージョンを渡してあげると、使用するバージョンを特定できる。
$ rails _1.2.6_ --version
Rails 1.2.6
(追記 2008.11.6)
ちなみに、インストールは次のようにバージョンを指定する。
gem install rails --include-dependencies --version '= 1.2.6'
2008年5月18日日曜日
my MacBook Air often crashed
MacBook Airが、よく刺さるのは私だけでしょうか。。
一日3,4回ささるので、そろそろジーニアスバーに行こうかと
思います。
エラーメッセージはこんなの ↓
panic(cpu 1 caller 0x00192EE1): "pmap_flush_tlbs() timeout: " "cpu 0
failing to respond to interrupts, pmap=0x534500 cpus_to_signal=1"@/
SourceCache/xnu/xnu-1228.4.31/osfmk/i386/pmap.c:4570
追記:
CPUのコアがひとつ死んでいてみたいです。アクティビティモニタの下のほうにあるCPU活動率をみるとわかるよ。
2008年4月17日木曜日
Nokia N95がsoftbankから
実はiphoneより使えるN95がソフトバンクから!
http://mb.softbank.jp/mb/product/X/x02nk/index.html
出たら買おう (^^)
2008年3月8日土曜日
2007年7月6日金曜日
Bluetooth A2DP profile on MacOSX Tiger with Jack Audio
http://blog.david.connolly.name/2007/06/stereo-bluetooth-profile-a2dp-on-mac-os.html を参考にしました。
1. Bluetooth 設定アシスタント 等で、ヘッドセットをMacとペアリングする。このとき、ヘッドセットのMACアドレスを控えておく。ここでは、11-22-33-44-55-66とする。
2. Jack OSXを[1]からダウンロードし、インストールする。
3. システム環境設定 > ユニバーサルアクセス > 画面表示タブ の下にある 「補助装置を使用可能にする」を有効にする。
4. Audio Midi 設定ユーティリティを実行し、メニューバー > オーディオ > 機器セットエディアを開く。「コンピュータに対して機器セットを追加または削除する」で「+」をクリックする。すると、”機器セット”が追加されるが、名前を変更する。日本語を使わうと、Jack OSXが発狂するので。1byte文字しか扱えないみたい。ここでは、"Aggregate Device"と名前をつけ直したとする。「構成」で、内蔵入力および内出力、ヘッドセットの入力、ヘッドセットの出力の4つの「使用」チェックボックスをクリックし、有効にする。
5. Jack OSX Autostart versionを[1]からダウンロードし、"autostart jackosx"をアプリケーションフォルダ等にコピーする。
6. "autostart jackosx"をクリックし、JackPilotをスタートする。
7. システム環境設定 > サウンド > 出力および入力 タブで、Jack Routerを選ぶ。
8. a2dpcastを[2]からダウンロードする。展開して、a2pdcastを/usr/local/bin/にコピーする。
9. ターミナルで以下を実行
% /usr/local/bin/a2dpcast 11-22-33-44-55-66
10. iTunes (その他A2DPで利用したいアプリ) を実行する。
11. JackPilotに戻り、routingボタンをクリックする。"Send Ports"でiTunesのout1 or out2を選び、"Receive Ports"のa2dpcastのin1 or in2をダブルクリックしてバインドする。
12. iTunesに戻り、再生をする。
音はなるが、結構音飛びしてしまいます。。なんでだろう。
[1] http://www.jackosx.com/
[2] http://www.coolatoola.com/a2dpcast.zip
1. Bluetooth 設定アシスタント 等で、ヘッドセットをMacとペアリングする。このとき、ヘッドセットのMACアドレスを控えておく。ここでは、11-22-33-44-55-66とする。
2. Jack OSXを[1]からダウンロードし、インストールする。
3. システム環境設定 > ユニバーサルアクセス > 画面表示タブ の下にある 「補助装置を使用可能にする」を有効にする。
4. Audio Midi 設定ユーティリティを実行し、メニューバー > オーディオ > 機器セットエディアを開く。「コンピュータに対して機器セットを追加または削除する」で「+」をクリックする。すると、”機器セット”が追加されるが、名前を変更する。日本語を使わうと、Jack OSXが発狂するので。1byte文字しか扱えないみたい。ここでは、"Aggregate Device"と名前をつけ直したとする。「構成」で、内蔵入力および内出力、ヘッドセットの入力、ヘッドセットの出力の4つの「使用」チェックボックスをクリックし、有効にする。
5. Jack OSX Autostart versionを[1]からダウンロードし、"autostart jackosx"をアプリケーションフォルダ等にコピーする。
6. "autostart jackosx"をクリックし、JackPilotをスタートする。
7. システム環境設定 > サウンド > 出力および入力 タブで、Jack Routerを選ぶ。
8. a2dpcastを[2]からダウンロードする。展開して、a2pdcastを/usr/local/bin/にコピーする。
9. ターミナルで以下を実行
% /usr/local/bin/a2dpcast 11-22-33-44-55-66
10. iTunes (その他A2DPで利用したいアプリ) を実行する。
11. JackPilotに戻り、routingボタンをクリックする。"Send Ports"でiTunesのout1 or out2を選び、"Receive Ports"のa2dpcastのin1 or in2をダブルクリックしてバインドする。
12. iTunesに戻り、再生をする。
音はなるが、結構音飛びしてしまいます。。なんでだろう。
[1] http://www.jackosx.com/
[2] http://www.coolatoola.com/a2dpcast.zip
2007年6月28日木曜日
好きこそものの上手なれ の仕組み
扁桃体が「好き」と判断すると、脳が活性化されます。「好きこそものの上手なれ」といいますが、好きという情動で脳が活性化されるのですから、それだけ学習の効果も高まるというわけなのです。(子供の科学2007年7月号, 誠文堂新光社)
科学的に真なのですね。
2007年5月28日月曜日
flickrで遊ぼう
Flickrに載せている画像のサムネールを自分のホームページに載せたいと思い、そのやり方を探していたら、丁寧に解説してくれているページを発見。多謝。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061101/252356/
http://itpro.nikkeibp.co.jp/article/COLUMN/20061101/252356/
2007年5月23日水曜日
blockingしちゃう関数の扱い方
delegateが用意されているものならそれを使えばいいけど、そうじゃないときは、threadで該当関数を走らせて、その終了を拾うまでsleepさせる方法をとる。
endRunLoop = NO;
[NSThread detachNewThreadSelector: @selector(aThreadRoutine:) toTarget:[MyClass class] withObject:nil];
double resolution = 1.0;
BOOL isRunning;
endRunLoop = NO;
do {
NSDate* next = [NSDate dateWithTimeIntervalSinceNow:resolution];
isRunning = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:next];
} while (isRunning && !endRunLoop);
+ (void) aThreadRoutine:(id)anObject
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// blocking operation here
endRunLoop = YES;
[pool release];
[NSThread exit];
}
別に正しい方法があったらごめん。
endRunLoop = NO;
[NSThread detachNewThreadSelector: @selector(aThreadRoutine:) toTarget:[MyClass class] withObject:nil];
double resolution = 1.0;
BOOL isRunning;
endRunLoop = NO;
do {
NSDate* next = [NSDate dateWithTimeIntervalSinceNow:resolution];
isRunning = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:next];
} while (isRunning && !endRunLoop);
+ (void) aThreadRoutine:(id)anObject
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// blocking operation here
endRunLoop = YES;
[pool release];
[NSThread exit];
}
別に正しい方法があったらごめん。
2007年5月11日金曜日
自前Modal Window
警告パネルを表示して、ユーザからなにかしらの入力を待ち、それによってプログラムの振る舞いを変えたいことがある。例えば、ファイヤウォールのようなアプリケーションを作成して、あるサイトからのアクセスがあった場合に、そのサイトからのアクセスを許可するかどうかをユーザに訪ねる場合だ。
このとき、NSAlertではなく、NSWindowやNSPanelを拡張して自前のクラスを用意した場合に、ユーザの入力を待ちつつ自前クラスの処理を平行して行いたいのだが、どうやってユーザの入力を待つかがむずかしい。なぜならば、単純にwhileとsleepでまわすと、そのRunLoop内のすべての処理をblockしてしまうから。
解決方法は、そのクラスをmodalSessionにして、必要な処理はタイマで回す。その際、タイマは、NSModalPanelRunModeにも追加しておく。
(NSWindowを継承したクラス内)
--- init method
timer = [NSTimer timerWithTimeInterval:0.05 target:self selector:@selector(alertWindowAppear) userInfo:nil repeats: NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSModalPanelRunLoopMode];
--- modal method
NSModalSession session = [NSApp beginModalSessionForWindow:self];
int modalResult;
do {
modalResult = [NSApp runModalSession:session];
if (modalResult == NSOKButton) {
[NSApp abortModal];
[NSApp endModalSession:session];
// related processing here
} else if (modalResult == NSCancelButton) {
[NSApp abortModal];
[NSApp endModalSession:session];
// related processing here
}
} while (modalResult == NSRunContinuesResponse);
このとき、NSAlertではなく、NSWindowやNSPanelを拡張して自前のクラスを用意した場合に、ユーザの入力を待ちつつ自前クラスの処理を平行して行いたいのだが、どうやってユーザの入力を待つかがむずかしい。なぜならば、単純にwhileとsleepでまわすと、そのRunLoop内のすべての処理をblockしてしまうから。
解決方法は、そのクラスをmodalSessionにして、必要な処理はタイマで回す。その際、タイマは、NSModalPanelRunModeにも追加しておく。
(NSWindowを継承したクラス内)
--- init method
timer = [NSTimer timerWithTimeInterval:0.05 target:self selector:@selector(alertWindowAppear) userInfo:nil repeats: NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSModalPanelRunLoopMode];
--- modal method
NSModalSession session = [NSApp beginModalSessionForWindow:self];
int modalResult;
do {
modalResult = [NSApp runModalSession:session];
if (modalResult == NSOKButton) {
[NSApp abortModal];
[NSApp endModalSession:session];
// related processing here
} else if (modalResult == NSCancelButton) {
[NSApp abortModal];
[NSApp endModalSession:session];
// related processing here
}
} while (modalResult == NSRunContinuesResponse);
2007年5月10日木曜日
performCloseで消したWindowの再表示
NSWindowのorderFrontを呼び出すと、performCloseで消したWindowを再表示できる。
例えば、 MainMenuのWindowに一度消したWindowの再表示メニューを作りたい場合は、Interface Builderで適当に項目を作り、そこからWindowのInstanceにコントロール&ドラッグして、orderFrontに Connectしてやればいい。
例えば、 MainMenuのWindowに一度消したWindowの再表示メニューを作りたい場合は、Interface Builderで適当に項目を作り、そこからWindowのInstanceにコントロール&ドラッグして、orderFrontに Connectしてやればいい。
2007年4月25日水曜日
mouse eventの拾い方
mouseDown等のeventを拾うためには、TackingRectを追加する必要がある。
例えば、selfがNSWindowの場合は以下の通り。
[[self contentView] addTrackingRect:screen owner:self userData:nil assumeInside:NO];
NSWindow NSResponder
例えば、selfがNSWindowの場合は以下の通り。
[[self contentView] addTrackingRect:screen owner:self userData:nil assumeInside:NO];
NSWindow NSResponder
登録:
投稿 (Atom)