Hatena::ブログ(Diary)

130単位

2011-02-25

WubiでUbuntu 10.10を使ってみた

Get Ubuntu Desktop Edition Windows installer
http://www.ubuntu.com/desktop/get-ubuntu/windows-installer

Windowsファイルシステム上にインストールして使えるUbuntuです。インストールするとデュアルブートになります。1日使ってみての感想などのメモです。

Wubi

f:id:deeeki:20110307144952j:image

モニタ
  • システム > 設定 > モニタ
    • すべてのモニタで同じ画像のチェックをはずす
  • プライマリモニタの切り替えができないっぽい
    • ケーブルを差し替える必要がある
端末(gnome-terminal)
その他
  • プラグの口によってはイヤホンが認識しないことがある
  • ウインドウ移動時のエフェクト
    • システム > 設定 > 外観の設定
    • 視覚効果 > 追加効果
  • パネルはAlt押しながらドラッグして画面を移動できる
  • 端末でLANG=C xdg-user-dirs-gtk-updateでデフォルトディレクトリ名を英字に
  • ネームサーバーの設定ファイルは/etc/nsswitch.conf
    • ローカルDNSを使っている場合「hosts: files dns」にするといいらしい
  • 日本語入力時に変換した際に内容が消えることがある

ソフトウェア

とりあえず必要なものから適宜インストールしていきました。

Chrome
  • 設定同期機能が超便利
mozc
Deskbar Applet
Twitter
  • デフォルトのGwibberはReTweetできない
  • Choqokは比較的まともだがReTweetの挙動がいまいち
  • 他のはなんか認証がうまくいかなかったりいまいち
  • AIRクライアント(TweetDeck, Saezuri)
    • 日本語入力切り替えが効かない
Eclipse
その他

すでに他の人が使っているのを見ていたのですが、予想通りかなり快適です。Commandキーがない分、WindowsMacよりも移行しやすいと思います。特に本番サーバーDebian/Ubuntuであれば、ほとんど環境依存を気にせず開発できるのが大きなメリットといえるでしょう。


4861906512
Ubuntu10.10完全ガイド (INFOREST MOOK PC・GIGA特別集中講座 408)

4774145408
Ubuntu上級活用マニュアル


【関連記事】
Ubuntu 10.10 RVM/Ruby1.8/Rails2/Passenger2環境構築 - 130単位
Ubuntu 9.04 Desktopをインストールしてみた - 130単位

*1:母体のPCによるかもしれません

2011-02-24

Ubuntu 10.10 RVM/Ruby1.8/Rails2/Passenger2環境構築

少し前のプロジェクトの環境構築をしてみてました。開発環境なのでやる必要はないものの、あえてのRVMとPassengerの組み合わせに手こずりました。間違いや不要な点ありましたらご指摘ください。

環境

パッケージインストール

#RVM用
sudo apt-get install git
sudo apt-get install curl
sudo apt-get install libreadline-dev
#Ruby用
sudo apt-get install zlib1g-dev 
sudo apt-get install libssl-dev
sudo apt-get install openssl
sudo apt-get install libopenssl-ruby
#【追記】rvm notes で書かれている下記を実行するのがよさそうです
sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev
#Passenger用
sudo apt-get install build-essential apache2-prefork-dev libapr1-dev libaprutil1-dev
#MySQL
sudo apt-get install mysql-server
#gem MySQL用
sudo apt-get install mysql-client libmysqlclient-dev
#Apache
sudo apt-get install apache2
  • ※要らないものもあるかも

RVMインストール

cd
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> .bashrc
source .bashrc

Rubyインストール

rvm install 1.9.2
rvm install 1.8.7

gemset作成

rvm use 1.8.7
rvm gemset create myapp
rvm gemset use myapp

gemインストール

rvm use 1.8.7@myqpp --default
gem install rails -v 2.3.5
gem install mysql -v 2.8.1
gem install passenger -v 2.2.15

DB準備

Passenger設定

passenger-install-apache2-module #最初にrvmsudoはつけなくてもよさげ
rvm wrapper 1.8.7@myapp passenger

Apache設定

# Passenger Configuration
LoadModule passenger_module /home/user/.rvm/gems/ruby-1.8.7-p334@myapp/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /home/user/.rvm/gems/ruby-1.8.7-p334@myapp/gems/passenger-2.2.15
PassengerRuby /home/user/.rvm/bin/passenger_ruby

<VirtualHost *:80>
        ServerName myapp.example.com
        DocumentRoot /home/user/myapp/public
        PassengerEnabled on
        RailsEnv development
        <Directory /home/user/myapp/public>
                AllowOverride all
                Options -MultiViews
        </Directory>
</VirtualHost>

127.0.0.1 myapp.example.com

  • /etc/hostsに追記

アプリ起動(Apache起動)

sudo service apache2 start

おまけ

  • zlib等を入れる前にRubyを入れてあとからエラーになった場合
    • apt-getでzlib等を入れてから下記実行
cd .rvm/src/ruby-1.8.7-p334/ext/zlib/
ruby extconf.rb
make && make install
cd .rvm/src/ruby-1.8.7-p334/ext/openssl/
ruby extconf.rb
make && make install

参考リンク


4873113679
初めてのRuby

4774145408
Ubuntu上級活用マニュアル


【関連記事】
Mac OS X Snow Leopard Ruby1.9/Rails3環境構築 - 130単位

2011-02-22

SWF Editor for PHP 画像置換

SWF Editor for PHP プロジェクト日本語トップページ - SourceForge.JP 
http://sourceforge.jp/projects/swfed/

CentOS5.5/PHP5.1.6(yum)/SWF Editor0.30 で試してみました。

./
|-- swfreplace.php
|-- test.png
`-- test.swf

こんなファイル構造で、PNG画像を置換します。

PNG置換サンプルコード

SWF Editorの中のサンプルのひとつswfreplacepngdata.phpを、画面表示用に編集しました。

<?php
$swfdata = file_get_contents('test.swf');
$imgdata = file_get_contents('test.png');

$obj = new SWFEditor();
$obj->setShapeAdjustMode(SWFEditor::SHAPE_BITMAP_RECT_RESIZE);
$obj->input($swfdata);
$obj->replacePNGData(2, $imgdata);

header('Content-Type: application/x-shockwave-flash');
echo $obj->output();

SWFEditor#replacePNGDataの第一引数は、swfファイルの中のobjectIDを指定します。

手元に編集ソフトがなくてobjectIDが不明な場合は、swfmillでXMLにするとわかります。以下test.swfXML化した一部抜粋です。

      <DefineBitsLossless2 objectID="2" format="3" width="48" height="48" n_colormap="16">
        <data>
          <data>eNqVli2aE0...(省略)</data>
        </data>
      </DefineBitsLossless2>

ある程度長い文字列のデータ(画像リソース)を持つ部分のobjectIDを指定すればokです。

メモ


【関連記事】
SWF Editor for PHPのインストールとswfファイル圧縮 - 130単位

2011-02-15

CakePHP env()で環境判定してシェル実行

開発や本番など、環境によって設定を切り替えるには大きく分けて2つの方法があるかと思います。

今回は後者の判定方法についてです。

env()

CakePHPにはenv()という便利な関数があり、$_SERVERもしくは$_ENVで定義されている変数をうまい具合に取得することができます。

env(string $key)

有効なソースから環境変数を取得します。$_SERVER あるいは $_ENV が無効な場合、代替として使用されます。

この関数はサポートしていないサーバでも PHP_SELF や DOCUMENT_ROOT をエミュレートします。実際に完全なエミュレーションラッパーですので、 $_SERVER や getenv() の代わりに常に env() を使用することは(特にコードを配布する計画がある場合には)よい考えです。

no title

例として、環境の判定のために「CAKE_ENV」というキーを用いることにします。env('CAKE_ENV')の返り値で判定できます。

Webからアクセス

#開発環境
SetEnv CAKE_ENV development
#本番環境
#SetEnv CAKE_ENV production

Apacheの設定に環境に応じて記述することで判定できます。

シェル

ようやく本題です。

コマンドライン
export CAKE_ENV="development"

としてからシェルを実行すればokです。サーバーで1つの環境しか使わないのであれば、.bashrcなどに記述してもいいと思います。

CAKE_ENV="development" /full/path/to/cakeshell myshell

としてワンライナーで実行することもできます。

cron

cronで自動実行する場合、crontab -e で以下のように書くことができました。

CAKE_ENV="development"
0 * * * * /full/path/to/cakeshell myshell1
0 * * * * /full/path/to/cakeshell myshell2
CAKE_ENV="production"
0 * * * * /full/path/to/cakeshell myshell1
0 * * * * /full/path/to/cakeshell myshell2

先の2つのジョブにはdevelopmentが適用され、後の2つはproductionとして実行されます。MAILTOなどと同様に、自由に変数を定義できるようです。ただし深く調べたわけではないため、もしかしたら不具合が起きるかもしれません。冗長にはなってしまいますが、各ジョブを先程のワンライナーの記述にしておいたほうが無難というか安全です。

ちなみにファイル/ディレクトリによる判定は、Webかコマンドかにとらわれずに処理できるのがメリットといえます。

関連リンク


Pocket詳解 CakePHP辞典
Pocket詳解 CakePHP辞典


【関連記事】
CakePHP cronでシェル実行 - 130単位

2011-02-05

3万円台で買えるiRobotルンバ550で自動掃除してみた

部屋の掃除が面倒になってきたので、思い切ってルンバを購入してみました。

f:id:deeeki:20110205105215j:image

いざ買おうと思ったときに見つけた以下のTogetterが非常に参考になりました。

こちらで550という輸入品の存在を知り、リーズナブルな値段の割に機能は申し分なく、真っ黒なデザインも気に入ったので購入を決めました。

開封

f:id:deeeki:20110205105137j:image

日本語説明書が付いています(※購入する店舗によると思います)。

f:id:deeeki:20110205105338j:image

真ん中にある本体と、下の方にある充電器でとりあえずは使えます。

f:id:deeeki:20110205105839j:image

ルンバ本体、思ったよりでかいです。測ったら直径約33cmありました。

f:id:deeeki:20110205105942j:image

裏側には何やらいろいろあります。使う前に絶縁シートを抜きます。

f:id:deeeki:20110205223516j:image

ホームベースで充電中です。ボタンが緑点灯したら充電完了です。

感想

はじめての利用は、当然ながら気になるのでずっと観察してました。その感想です。

  • CLEANボタンを押して掃除開始
  • 稼働中の音はそれなりに大きい
  • 掃除するルートは規則的ではない
    • 同じ場所を通ったりもする
  • 壁などで前方に進めないときの方向転換がなんかかっこいい
  • ラグやダンボール2枚程度の段差なら問題なく進む
  • 玄関の段差は一瞬回避できると思いきやこけて止まった、ので助けた
    • 付属のバーチャルウォールを利用するといいのかもしれない
  • (乾いた状態の)ユニットバスも問題なし
  • DOCKボタンを押したらホームベースを探し当てて戻った

動画みつけたので貼っておきます。

D
YouTube

f:id:deeeki:20110205115859j:image

ひととおり掃除してもらったら、ダスト容器を取り外してゴミを捨てます。

総評:期待は裏切らなかった、です。まだ1回使っただけなので新鮮さ的な補正はあるかもしれませんが、それでも今後の掃除を任せられる確信が持てたため、大いに満足しています。

ルンバ550が買えるところ

【※輸入品の購入に関して】
公式ではサポート外なため、理解した上で購入する必要があります。
並行輸入品について|アイロボット公式サイト | iRobot

日本で未発売! 大人気のロボット掃除機ルンバ★☆♪【smtb-m】ご入金いただきましてから5週間...

  • 最安値
    • 現時点で31,000円
  • クレジットカード支払い不可
  • 注文より5週間前後で発送
  • 保証なし
  • 電源アダプタそのまま
    • 動作はするが変圧器併用推奨とのこと
  • 日本語説明書

[無料1年保証!][最大7年保証!][楽天最安値に挑戦][正規品][PSE対応][iRobot Roomb...

  • 予約販売
    • 現時点での発送は2月中旬以降
  • 1年保証付
    • 最大7年
  • PSEマーク付電源アダプタに交換
  • 日本語説明書
  • レビュー投稿でエッジブラシ×1サービス

【送料無料】【正規品】【PSE対応】【2年保証】【iRobot Roomba】【ルンバ 550】【YDKG-tk】【s...

  • 現時点で在庫あり即発送
  • 2年保証付
  • PSEマーク付電源アダプタに交換
  • 日本語説明書
  • レビュー投稿でエッジブラシ×2サービス

自分は最後の店舗で購入して、注文2日後に到着しました。

2011-02-04

HTML_EmojiでDoCoMoから変換できない絵文字を調べてみた

携帯絵文字変換ライブラリ HTML_Emoji - libemoji.com
http://libemoji.com/html_emoji

3キャリア共通ソースコードの場合、DoCoMoのShift-JISバイナリ表記(i絵文字で入力できるやつ)を利用しています。ただしauSoftBankで一部の絵文字は変換されません(代用の文字に置換されます)。ので、変換できない絵文字を洗い出してみました。

【追記】au/SoftBankともに検出された絵文字がかぶっていたため、ユニークになるよう修正しました。画像/コードとも差し替えてます。

au/SoftBank変換できない絵文字

252種類中34種類ありました。

f:id:deeeki:20110402173115j:image

コード

冗長で無駄な処理もある気がしますが晒してみます。文字に置換されたときの'['の有無で判定しています。

<?php
require_once('HTML/Emoji.php');
$emoji = HTML_Emoji::getInstance();
$pict_contents = file_get_contents('picts.txt');
$picts = explode("\n", $pict_contents);
$picts_a = explode("\n", HTML_Emoji::getInstance('au')->filter($pict_contents, array('Output')));
$picts_s = explode("\n", HTML_Emoji::getInstance('softbank')->filter($pict_contents, array('Output')));
$disable_picts_a = detect_disable_picts($picts_a);
$disable_picts_s = detect_disable_picts($picts_s);

$disable_idxs = array_unique(array_merge(array_keys($disable_picts_a), array_keys($disable_picts_s)));
sort($disable_idxs);
$disable_picts = array();
foreach ($disable_idxs as $idx) {
	$disable_picts[] = $picts[$idx];
}

function detect_disable_picts($picts = array()) {
	$disables = array();
	foreach ($picts as $idx => $pict) {
		if (strpos($pict, '[') === 0) {
			$disables[$idx] = $pict;
		}
	}
	return $disables;
}

if (isset($argv[0])) {
	echo implode(' ', $disable_picts);
	exit;
}

if ($emoji->isSjisCarrier()) {
	header('Content-Type: application/xhtml+xml; charset=Shift_JIS');
}
else {
	header('Content-Type: application/xhtml+xml; charset=UTF-8');
}
echo $emoji->filter(implode(' ', $disable_picts), array('Output'));

https://github.com/deeeki/sandbox/blob/master/detect_disable_picts/detect_disable_picts.php

関連リンク

お客様のお探しのページが見つかりません−404 Not Found | NTTドコモ


4774143308
PHP×携帯サイト実践プログラミング


【関連記事】
CakePHP HTML_Emojiで絵文字変換 - 130単位

2011-02-01

1月分の読書記録

10冊読めました。id:Chikirinさんの『ゆるく考えよう 人生を100倍ラクにする思考法』が強く印象に残っています。多岐にわたる分野での、独自のアウトプット。まさに「その人にしか書けない内容を、誰にでも分かりやすく書かれている」と感じました。ホリエモンの帯のコメント「100倍役に立つ」はあながち間違ってないと思いました。

1月分読書データ

期間 : 2011年01月
読了数 : 10 冊
Software Design (ソフトウェア デザイン) 2011年 02月号 [雑誌]
技術評論社 (2011-01-18)
★★★☆☆ 読了日:2011年1月30日
multitail試す。ディストリビューション解説はためになった
バクマン。キャラクターブック キャラマン。 (ジャンプコミックス)
小畑 健 / 集英社 (2010-12-29)
★★★☆☆ 読了日:2011年1月30日
これだけのキャラをシリーズ完結でなく並行で処理しているのに感心する
ゆるく考えよう 人生を100倍ラクにする思考法
★★★★☆ 読了日:2011年1月29日
広範囲に発見、刺さる内容が多かった。人生設計とは「仕事、家庭、趣味の中から最大二つを選ぶ」という選択
GIGAZINE 未来への暴言
山崎恵人 / 朝日新聞出版 (2010-12-07)
★★★★☆ 読了日:2011年1月10日
Webの現在過去未来への独特かつ深い考察は、知見が広がった。「チャンスは自分で選ぶことはできても、結局第一歩は誰かから与えられるものがほとんど」
ほったらかし投資術 インデックス運用実践ガイド (朝日新書)
山崎 元 , 水瀬ケンイチ / 朝日新聞出版 (2010-12-10)
★★★★☆ 読了日:2011年1月8日
理論から具体的な実践まで幅広く学べる。投信だけでなくETFの解説も充実。「売り買いではなく、持っていることが運用」
入門git
Travis Swicegood / オーム社 (2009-08-12)
★★★★☆ 読了日:2011年1月6日
コマンドはもとより、背景や思想を理解するのに役立った
顧客が熱狂するネット靴店 ザッポス伝説―アマゾンを震撼させたサービスはいかに生まれたか
トニー・シェイ / ダイヤモンド社 (2010-12-03)
★★★★☆ 読了日:2011年1月3日
「最初に自分にとってのより崇高な目標とは何かを見出して、追い求め、その後、その下に情熱、さらにその下に快感で得られる幸福感を据える」
バクマン。 (11) (ジャンプコミックス)
小畑 健 / 集英社 (2010-12-29)
★★★★☆ 読了日:2011年1月3日
CROW×NATURAL+のコラボとPCPシリーズもののトリックには心踊った
NARUTO-ナルト-(54)(ジャンプコミックス)
岸本 斉史 / 集英社 (2010-12-29)
★★★☆☆ 読了日:2011年1月3日
バトル多し。それぞれ個性的な技が面白い
ネットで成功しているのは〈やめない人たち〉である
いしたに まさき / 技術評論社 (2010-11-27)
★★★★☆ 読了日:2011年1月3日
「自分の『面白い』を表沙汰にしてログとして残してこくことが、その後の自分の未来への投資になる」

メディアマーカー

12月分の読書記録 - 130単位 (一ヶ月前)

1月分の読書記録 - 130単位 (一年前)