2010年12月18日土曜日

Ubuntuでディスクを完全消去する方法

HDDやUSBメモリを破棄したり、譲渡したりする場合は、データを完全に消去しなければなりません。
Linuxには、そのためのshredというコマンドが用意されています。


環境
・Ubuntu 10.10 Desktop 64bit


まずは、fdiskで、消去したいデバイスを調べます。
$ sudo fdisk -l

ディスク /dev/sda: 128.0 GB, 128035676160 バイト
ヘッド 255, セクタ 63, シリンダ 15566
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0x00031378

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sda1   *           1       14928   119909128+  83  Linux
/dev/sda2           14929       15566     5124735    5  拡張領域
/dev/sda5           14929       15566     5124703+  82  Linux スワップ / Solaris

ディスク /dev/sdf: 32 MB, 32768000 バイト
ヘッド 2, セクタ 32, シリンダ 1000
Units = シリンダ数 of 64 * 512 = 32768 バイト
Disk identifier: 0xe4cb8593

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sdf1   *           1         999       31952    4  FAT16 <32M


今回は、32MBのUSBメモリを消去してみます。


下記のコマンドで、ランダムデータの書き込みを4回行います。
$ sudo shred -n 4 -v /dev/sdf1


万全を期す場合は、-zオプションを使います。ただし、すごく時間かかります。
$ sudo shred -z -v /dev/sdf1

今回使ったオプション
-n・・・ランダム書き込みを行う回数
-v・・・進捗状況の表示
-z・・・ランダム書き込みを25回行い、最後に0を書き込む

2010年12月15日水曜日

Ubuntu 10.10 64bitにOpenNIをインストール

ようやくkinectに触れる時間ができたので、話題のOpenNIを入れてみました。



環境
・Ubuntu 10.10 Desktop 64bit


ほとんどの手順は、下記ページの通り。
TK's HP - Linux Ubuntu 10.04でOpenNIを使ってKinectを動かしてみる
NITEは、64bit用のものをインストール。


OpenNI/Samples/Bin/Releaseと、NITE/Samples/Binに入っているサンプルを実行して、動作確認を行います。




















OpenNIのサンプルは動作するものの、NITEのサンプルは、ほとんど動きません・・・Ubuntuだから?64bitだから?
正式版が出たら、もう一度トライしてみたいと思います。

2010年11月15日月曜日

VirtualBoxのゲストでWindows7入れたときに、オーディオデバイスが認識しない

VirtualBoxで、ゲストOSとしてWindows 7を入れたときに、オーディオデバイスが認識しないというトラブルがあったので、その解決法をメモしておきます。


環境
・Ubuntu 10.04 Desktop 64bit
・VirtualBox 3.2.10


解決法といっても、下記のサイトから、AC97のドライバをダウンロードしてインストールするだけ。
AC'97 Audio Codecs
Chromeだと、ページの挙動がおかしいので、IEでダウンロードしましょう。

2010年10月21日木曜日

HerokuでSassを使う

Herokuのファイルシステムは、read onlyになってて、Sassが動きません。
ググってみたら、解決法はいろいろ出てきますが、ソースが古くて、Rails3環境では役に立ちません。
数時間かけて、ようやく解決法を見出すことができたので、ここにやり方を公開します。


環境
・Ruby 1.9.2
・Rails 3.0


まず、Gemfileに、hassleを追加します。
最新版がほしいので、gitリポジトリから直接取ってきます。
$ vi Gemfile

gem 'hassle', :git => 'git://github.com/koppen/hassle.git'

あとは、"bundle install"するだけ。
$ bundle install


以上おわり。
えっ、あっけなすぎるって?シンプルイズベストです。

2010年10月11日月曜日

RubyのwatirでGoogle Chromeを自動操縦

とある実験を行うため、Google Chromeを自動操縦する必要があったので、Rubyのwatirというライブラリでそれをやってみました。
ただ一つ注意すべきなのは、watirは、Ruby 1.8.6でしか動かないということです。ちょっと使いづらいですね。


環境
・Ubuntu 10.04 Desktop 64bit
・Ruby 1.8.6
・watir-webdriver 0.1.1


まずは、RVMにRuby 1.8.6をインストールします。
$ rvm install 1.8.6

RVMのインストール方法がわからないという人は、こちらを参考にしてみてください。
Ubuntu 10.04で、Ruby 1.9.2 + Rails 3.0 + DataMapper on Herokuをやってみた


次に、Google Chromeを動かすための"watir-webdriver"をインストールします。
gem install watir-webdriver


これで準備が整いました。
下記の例では、Gmailに自動ログインし、10秒おきにリロードするという処理を行っています。

require "rubygems"
require "watir-webdriver"

browser = Watir::Browser.new(:chrome)
browser.goto("http://gmail.com")
browser.text_field(:id => "Email").set "enteryourusername"
browser.text_field(:id => "Passwd").set "enteryourpassword"
browser.button(:id => "signIn").click
loop do
  browser.refresh
  sleep 10
end


このライブラリは、アイデア次第で、いろいろ活用できそうですね。

2010年10月4日月曜日

光の単位: カンデラ、ルーメン、ルクスの違い

何かと混乱しやすい光の単位について調べてみました。


カンデラ(cd)
光を1点の点光源(スポット的な光)とみなし、その点光源から発する光の強さをカンデラという。
1平方メートルあたりに照射される光量を基準とするので「cd/㎡」という単位で用いられる。屋外で視認可能であるにはおよそ300cd/㎡の光が最低限必要とされる。パソコンの液晶ディスプレイは250~300cd/㎡程度のものが多い。

ルーメン(lm)
光源が360度全立体方向に放射する全体の光の量(光束)をルーメンという。
1ルーメンは、点灯したロウソクを1メートル先に置いたときの手元の明るさのことである。
プロジェクターなどにおいては、投射する画面全体に照明をいきわたらせる必要がある。そのため、明るさを計測する際には、画面を縦3×横3に9分割して各部分の明るさを計測し、それぞれの画面の明るさを平均した値を算出する方法がとられる。このとき、画面の各部分の明るさはワット(W)で、それらの値から算出された平均値はルーメン(lm)で計測される。

ルクス(lx)
光源によって照らされている面の明るさ(照度)をルクスという。
よって、光源からの距離によって、照らされる面のルクスは変化する。
1ルクスとは、
・1ルーメン(lm)の光束が1平方メートルの面を平均に照らす時の照度
・1カンデラ(cd)の点光源を半径1 mの球の中心に置いた時、その球の内面の照度
のことである。
一般に直射日光が約10万ルクス、部屋の窓際で2000ルクス程度、明るいオフィスで400ルクス程度の照度があるとされている。


こうやって並べてみると、それぞれの単位の相関関係が見えてきます。

大雑把にまとめると、
カンデラ・・・ディスプレイの輝度を表す場合
ルーメン・・・照明、プロジェクターの明るさを表す場合
ルクス・・・センサーで明るさを計測する場合
という使い分けになります。

一般人には、ルーメン以外、ほとんど関係ないですね。

2010年9月28日火曜日

「長崎に行ってやることメーカー」作りました

去年に引き続き、今年も長崎ITキャンプにお呼ばれしたので、行ってきました。
2泊3日の楽しいイベントなので、長崎近辺のIT関係者の方は、ぜひ参加されることをおすすめします。

今回のお題は、「ITで長崎の魅力を伝える」・・・みたいな内容だったと思います。

私達も、ゲストチームとして、クールなサービスを作っちゃいました。


その名も、
長崎に行ってやることメーカー

あなたのツイッターアカウントを入力すると、長崎に行ってやることを提案してくれる画期的なサービスです。生成された文章は、そのままツイートできます。


今回は、大量のアクセスがあることを想定していたので、Google App Engineで構築しました。

サービス内容はシンプルですが、バックエンドの処理は、大変複雑です。

処理の流れとしては、以下のようになります。
1. 様々なWebサイトをクロールし、ページキャッシュをBigTableに保存していく
2. ページ内の形態素解析を行い、キーワードを抽出
3. キーワードのクラスター分析を行い、長崎と関連性の高いものだけを再抽出

また、memcachedの活用により、高速なレスポンスを実現しています。
よくこれだけのものを1日で作れたなぁと、自分達でもビックリです!

このサービス、デプロイして2時間足らずで、3,000PVを超えるという人気っぷり。
バナーリンクしてたサイトのアクセス数も2倍に伸びたそうです。

エコシステムって、こうやって出来上がっていくんだなぁという、まさにその瞬間を垣間見ることができました。

2010年9月22日水曜日

Ruby 1.9.2 + Rails 3.0 + DataMapper on HerokuをUbuntuでやってみた

このドキュメントは、Rails界隈の最新技術を集めて、サンプルアプリを作り、Herokuにデプロイするまでの手順をまとめたものです。開発環境は、Ubuntu 10.04。


環境
・Ubuntu 10.04 Desktop 64bit
・RVM 1.0.11
・Ruby 1.9.2
・Rails 3.0.0
・DataMapper 1.0.2
・jQuery 1.4.2
・RSpec 2.0.0


RVMのインストール
いろんなバージョンのRubyを切り替えて使いたいので、RVMを使って、Rubyをインストールします。
まずは、rvmのインストールに必要なものをインストールします。
$ sudo apt-get install curl git-core libreadline-dev

準備が整ったら、rvmのインストールを実行します。
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

環境変数に、rvmのパスを追加します。
$ vi ~/.bashrc

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # 末尾に追加
$ source ~/.bashrc


Rubyのインストール
rubyをインストールする前に、下記のライブラリをインストールしておきます。
これを入れておかないと、Rails動かすときにエラーが出ます。
$ rvm package install zlib
$ rvm package install readline
$ rvm package install openssl

zlibのパスだけ上記でインストールしたものに変更して、Ruby 1.9.2をインストール
$ rvm install 1.9.2 -C --with-zlib-dir=$HOME/.rvm/usr,--with-readline-dir=$HOME/.rvm/usr,--with-openssl-dir=$HOME/.rvm/usr

デフォルトで使うRubyのバージョンを指定します。
$ rvm use 1.9.2 --default


PostgreSQLのインストール
今回は、DBにPostgreSQLを使います。
$ sudo apt-get -y install postgresql postgresql-server-dev-8.4 pgadmin3

インストール完了後、管理者アカウント"postgres"のパスワードを設定します。
$ sudo passwd postgres

設定ファイルを書き換えます。
$ sudo vi /etc/postgresql/8.4/main/pg_hba.conf

# Railsから接続するための設定(postgresユーザーで接続する場合)
# local all postgres ident コメントアウト
local all postgres trust # 追加

# pgAdmin3から接続するための設定
# host all all 127.0.0.1/32 md5 コメントアウト
host all all 127.0.0.1/32 trust # 追加

PostgreSQLを再起動。
$ sudo service postgresql-8.4 restart

PostgreSQLのアダプタをインストール。
$ gem install pg


Railsのインストール
$ gem install rails


サンプルアプリの作成
Railsプロジェクトの作成
"rails new"コマンドを実行して、プロジェクトを作成します。
"-m"でテンプレートを指定することにより、DataMapper用の初期設定まで自動的に行われます。
$ rails new testapp -d postgresql -m http://datamapper.org/templates/rails.rb
$ cd testapp

"bundle install"で、DataMapper関係のライブラリをインストールします。
$ bundle install


Hamlの導入
テンプレート記述言語を、Hamlに入れ替えます。

Gemfileに、下記の一行を加えて、"bundle install"でインストール。
$ vi Gemfile

gem 'haml-rails'

$ bundle install


jQueryの導入
JavaScriptライブラリを、jQueryに入れ替えます。

Gemfileに、下記の一行を加えて、"bundle install"でインストール。
$ vi Gemfile

gem 'jquery-rails'

$ bundle install

インストール後、下記のコマンドを実行すると、prototype.jsがjQueryに置換されます。
$ rails g jquery:install


Rspecの導入
テスティングフレームワークを、RSpecに入れ替えます。

Gemfileに、下記の一行を加えて、"bundle install"でインストール。
$ vi Gemfile

group(:development, :test) do
  gem 'rspec-rails' # ここに追加する
end

$ bundle install

あとは、設定ファイルをジェネレートして、準備完了です。
$ rails g rspec:install


database.ymlのユーザー名とパスワードを変更します。
$ vi config/database.yml

defaults: &defaults
adapter: postgres
username: enteryourusername
password: enteryourpassword

development:
testapp_development
<<: *defaults

test:
database: testapp_test
<<: *defaults   

production:
database: testapp_production
<<: *defaults

scaffoldで、ファイルを一式作成します。
$ rails g scaffold hoge title:string body:text

DBとテーブルを作成します。DataMapperの場合は、"rake db:migrate"ではなく、"rake db:automigrate"だということに気をつけてください。
$ rake db:create
$ rake db:automigrate

Webサーバを起動します。
$ rails s

ブラウザで、http://localhost:3000/hogesにアクセスし、きちんと表示されれば、成功です。


Herokuにデプロイ
Herokuにデプロイするまでの手順は、本家のドキュメントを参考にしてください。
Heroku | Heroku Quickstart Guide

注意点
1. マイグレーション
ローカルでの実行時同様、DataMapperの場合は、"heroku rake db:migrate"ではなく、"heroku rake db:automigrate"になります。
2. Rubyのバージョン
Herokuのデフォルトは、1.8.7です。下記のドキュメントを参考に、1.9.2への切り替えを行ってください。
Heroku | Platform Stacks (Beta)

その他
production.logを見たい場合はこちら。
Heroku | Logs and exceptions

2010年9月21日火曜日

Rails 2.3.9 on GAE with DataMapper

GAE上でアプリを作る必要が出てきたので、実験的にRails 2.3をデプロイしてみました。

環境
・Ubuntu 10.04 Desktop 64bit
・Ruby 1.8.7
・Rails 2.3.9

ほぼ、下記のサイトの手順通りにやれば、問題ないのですが、一箇所だけ注意が必要です。
Rails 2.3.9 on App Engine with DataMapper

rails_dm_datastoreをインストールしようとすると、こんなエラーが出てきます。
$ sudo gem install rails_dm_datastore
ERROR:  Error installing rails_dm_datastore:
 dm-appengine requires dm-core (~> 1.0, runtime)

なので、rails_dm_datastoreの前に、まずdm-coreの最新版をインストールしておきましょう。
$ sudo gem install dm-ar-finders dm-core dm-timestamps dm-validations

2010年9月17日金曜日

Googleの電卓機能で三角関数の計算



今さらですが、Googleの電卓機能で三角関数の計算ができることに気づきました。
お手軽に計算できて便利だったので、まだご存知ない方のために、ご紹介しておきます。

今回は、sin3°の計算をしてみます。

試しに、sin(3)と入力してみると

























当然ですが、おかしな値になってしまいます。

今度は、角度の代わりにラジアンを入れてみます。
360°=2πなので、3°だと、π/60になりますね。

























ちゃんと計算できました。

πの代わりに、piを使ってもOKです。























sineというエイリアス関数も用意されています。























もちろん、計算結果は同じ。

他にもいろいろ計算できるみたいなので、皆さんもちょっとした計算に使ってみてはいかがでしょうか?

2010年9月8日水曜日

実数、無理数、有理数、整数、自然数、素数の違い

プログラマ、いや、発明家たるもの、当然、数学に精通していなければなりません。
数学と物理に関しては、NHK高校講座で基礎から勉強し直してるのですが、大人になって学校の勉強するのって、なんだか楽しいです。


今日は、私がよくごっちゃになってしまう、数の種類について確認します。


集合の大きさでいくと、
素数 < 自然数 < 整数 < 有理数 < 無理数 < 実数
という順番になります。


素数・・・1と自分以外の約数を持たない自然数 (例)2, 3, 5, 7, 11...)
自然数・・・1以上の整数(ゼロとマイナスを含まない) (例)1, 2, 3, 4, 5...
整数 ・・・マイナスと0とプラスを含む1, 2, 3の集合 (例)...-2, -1, 0, 1, 2, 3...
有理数・・・分数で表せる数 (例)3/5, -2/7
無理数・・・分数では表せない数 (例)円周率 3.14159…
実数 ・・・実在する全ての数


こうやって並べてみると、違いがわかりやすいですね。

2010年9月3日金曜日

Ubuntuで、DHCPサーバからIPアドレスを再取得する

ネットワークのトラブルで、DHCPからIPアドレスを再取得しなければならない場合があります。

Windowsだと、
ipconfig /renew
の1コマンドで再取得できますが、

Ubuntuの場合は、

IPアドレス解放 => 新しいIPアドレスの取得

という手順を踏まなければなりません。


IPアドレスの解放
$sudo dhclient -r
There is already a pid file /var/run/dhclient.pid with pid 2119
killed old client process, removed PID file
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/vboxnet0/00:00:00:00:00:00
Sending on   LPF/vboxnet0/00:00:00:00:00:00
Listening on LPF/eth0/11:11:11:11:11:11
Sending on   LPF/eth0/11:11:11:11:11:11
Sending on   Socket/fallback
DHCPRELEASE on eth0 to 192.168.100.1 port 67

新しいIPアドレスの取得
$sudo dhclient
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/vboxnet0/00:00:00:00:00:00
Sending on   LPF/vboxnet0/00:00:00:00:00:00
Listening on LPF/eth0/11:11:11:11:11:11
Sending on   LPF/eth0/11:11:11:11:11:11
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8
DHCPOFFER of 192.168.100.50 from 192.168.100.1
DHCPREQUEST of 192.168.100.50 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.100.50 from 192.168.100.1
bound to 192.168.100.50 -- renewal in 126007 seconds.

2010年8月30日月曜日

iPhone用外付けバッテリーのベストバイはこれだ!

外出時のiPhoneのバッテリー消費が、あまりにもアレなので、そろそろ外付けバッテリーを買おうと思っています。


そこで、まず、第一候補として上がってきたのが、井村デザイン事務所のPES-8800
携帯機器を充電しまくれる安価な大容量外付けバッテリー「PES-8800」 - GIGAZINE 
8,800mAhという超大容量ながら、9,980円(Amazon)という安さ。
レビューを書いている人達の評価も、おおむね好評です。やっぱり、売れてるだけありますね。


私が調べた限りでは、10,000円以下で、この商品以上の容量を持ったバッテリーは、見つけられませんでした。※中国製の怪しげな商品を除く


それならば、PES-8800よりもコストパフォーマンスが高いバッテリーはないものか。
結果、探し当てたのが、ハンファ・ジャパンのAMS-D100です。
ケータイを6回フル充電できるモバイルバッテリー「AMS-D100」 :教えて君.net
5,200mAhで5,980円(Amazon)と、1mAhあたりの価格は、PES-8800以上です。
これだけ容量があれば、iPhone 3GS(1,400mAh)3回、リコーのデジカメ、CX3(950mAh)を1回充電することができます。


まとめ
私の使い方を考えると、5,200mAhで十分そうなので、値段の安いAMS-D100を購入します。

2010年8月25日水曜日

Googleドキュメント印刷時に、一部の漢字が文字化けする

今、Google Apps Scriptで簡単なWebアプリを作っているのですが、Googleドキュメントで印刷すると、"薬"が文字化けしてしまうという問題に直面してしまいました。

異なる2つの環境、
・Ubuntu 10.04 + Firefox 3.6.8
・Windows XP SP3 + IE 8.0.6001.18702
で実験を行ってみたのですが、文字化けが直りません。

どうやらこれは、Google側の問題のようですね。

ググっても、解決策が見つからなかったので、仕方なく、"薬"ではなく、"藥"を使うことにしました。
根本的な解決にはなっていませんが、とりあえずこれでうまくいってます。

2010年8月19日木曜日

Ubuntu 10.04 64bitにAndroid SDKとNDKをインストール

UbuntuにAndroid SDKとNDKをインストールした時の備忘録。


















環境
OS: Ubuntu 10.10 Desktop 64bit
Android SDK: r08(Android 2.3対応)
Android NDK: r5


まず、Android Developersのサイトから、Linux用のSDKをダウンロードし、適当な場所(今回は、~/bin/android-sdk)に展開します。
wget http://dl.google.com/android/android-sdk_r08-linux_86.tgz
tar zxvf android-sdk_r08-linux_86.tgz
mv android-sdk-linux_86 android-sdk
mv android-sdk ~/bin


同様に、こちらから、NDKをダウンロードし、SDKと同じディレクトリ(~/bin)に展開します。
wget http://dl.google.com/android/ndk/android-ndk-r5-linux-x86.tar.bz2
tar xjvf android-ndk-r5-linux-x86.tar.bz2
mv android-ndk-r5 android-ndk
mv android-ndk ~/bin


環境変数も、忘れずに追加しておくこと。
vi ~/.bashrc
ANDROID_SDK_ROOT=$HOME/bin/android-sdk
ANDROID_NDK_ROOT=$HOME/bin/android-ndk
PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_NDK_ROOT:$PATH


EclipseでAndroid Projectを作った直後、プログラム実行時にエラーが出るので、【Project】 > 【Clean】で解消します。
詳しくは、こちらのページを参照してください。


これでUbuntuで、Android開発ができるようになりました。