VPSのセットアップ.webサーバのOSで迷う.FreeBSDかUbuntuかCentOSかなぁ.yumとか便利だけど,欲しいバイナリが無いとき結構面倒なのが問題.
*Android 4.0.4
ICSの4.0.4のイメージが公開されたみたいです.
http://code.google.com/intl/ja/android/nexus/images.html
docomoのSC-04Dはなかなかアップデートされないので入れてみる.そもそも,買ったときにアップデートでテザリングできるようになると聞いて,docomoのサイトにも「Wi-Fiテザリングは、バージョンアップにて対応予定です」と書いてあるのに,すでにもう4ヶ月近く経ってるのなんなのだろう…….
少し待てばカスタムROM等も出てくると思いますが,とりあえず純正のイメージを使うことにします.
手順
たぶん,新し目のAndroid SDKのツール類が必要です.
adbとfastbootから色々やりたいので,bootloaderを操作できるように.
android_winusb.infはこんな感じ.
;SC-04D
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E30
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_D001
%CompositeAdbInterface% = USB_Install, USB\VID_04E8&PID_6860&MI_01
まず,/sdcardをバックアップ.アンロックすると,データを消さないといけないみたいなので,事前にPCに退避しておく.
ここからが本番.
bootloaderをアンロックする.
fastboot oem unlock
ロック解除して起動してみたら,アンロック時の説明のとおり,工場出荷時に戻ってデータも全部消えてました.
http://d.hatena.ne.jp/Kazzz/20111204/p1
このサイトを参考に,ClockworkMod Recoveryでバックアップ.
あとは,4.0.4のイメージを書き込む.
http://code.google.com/intl/ja/android/nexus/images.html
とりあえず,image-yakju-imm76d.zipをいれようとしたら,basebandのバージョンが違うと起こられてしまった.仕方なく radio-maguro-i9250xxla02.img も入れる.
kawahira-X220% fastboot flash radio radio-maguro-i9250xxla02.img
sending 'radio' (12288 KB)...
OKAY [ 1.393s]
writing 'radio'...
OKAY [ 2.426s]
finished. total time: 3.820s
kawahira-X220% fastboot reboot-bootloader
rebooting into bootloader...
OKAY [ 0.007s]
finished. total time: 0.008s
kawahira-X220% fastboot -w update image-yakju-imm76d.zip
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
--------------------------------------------
Bootloader Version...: PRIMEKK15
Baseband Version.....: I9250XXLA2
Serial Number........:
--------------------------------------------
checking product...
OKAY [ 0.006s]
checking version-bootloader...
OKAY [ 0.008s]
checking version-baseband...
OKAY [ 0.008s]
sending 'boot' (4148 KB)...
OKAY [ 0.458s]
writing 'boot'...
OKAY [ 0.476s]
sending 'recovery' (4478 KB)...
OKAY [ 0.511s]
writing 'recovery'...
OKAY [ 0.813s]
sending 'system' (316107 KB)...
OKAY [ 34.936s]
writing 'system'...
OKAY [ 36.887s]
erasing 'userdata'...
OKAY [ 0.685s]
erasing 'cache'...
OKAY [ 0.058s]
rebooting...
finished. total time: 74.881s
最初に入っていた SC04DOMLA1 というのじゃなくてもFOMAのプラスエリアとか使えるんだろうか….
エリアメールも入ってないのか.動くかどうかわからないけど,CellBroadcastReceiver.apkを移植しておく.
このままだと,起動時にブートローダーがアンロックされてることを示す錠のアイコンが表示されるけど,fastboot oem lockすれば非表示になる.再びunlockするとまたデータ消えるかどうかは未確認.
とりあえずrootはとらずに使う予定.
さらに体調悪い.風邪っぽいな.休み取ろうか悩んだけど,とりあえず夕方会社に行く.
体調悪いのでアレだったけど,夜通しアニメ見る会に参加.アニメ見ながら,VPSの環境を色々構築する.とても眠い.
体調悪い.
*さくらのVPS
新しくなったのでとりあえず2つ契約.もう一台欲しいけど,今あるやつを解約してから考えよう.
2Gにするか1Gにするか迷ったけど,全部1Gに統一していくことにする.1台は予備&データのバックアップ用だけど100GBあれば十分な気がするし.
あと,FreeBSDも1台作っておくことに.すごく久しぶりにFreeBSDをインストールした.
vim,bash,screen,ruby,apache あたりをインストール.subversionとirssiもあとで入れよう.
昔はけっこう時間かかりましたが,今は一瞬で終わりますね.
以前なら,vimもbashもいらなくて,viとcshで設定作業してたところだけど,しばらくLinuxに浸かっていたせいでだめになってしまった.ただ,何かインストールするたびに無意識のうちにrehashと打ってたので,大丈夫なのかもしれない.
やっぱりportsが安心できるな.ただ,いまどきなportsの管理方法が良くわからない.普通にportupgradeかportmasterでいいんだろうか.
本当は make buildworld したいところだけど,我慢してそのまま使う.
久しぶりにFreeBSDセットアップして思ったけど,やっぱLinuxが構築が楽ですね.
今週はなんだか疲る….
ずっと放置してたGoogle AdWordsの5000円分の無料お試し券の有効期限が迫ってたので,アカウント作ってみた.
アカウント作成時の500円はクレジットカードから払わないといけないのかな.よくわからない.怖いので単価とか予算は低めに,とりあえず適当に設定.しばらくこれで放置しよう.
メールサーバをGoogle Appsに移行して,転送の設定とか色々やった.これでレンタルサーバを1台解約できる.
いざというときのために,メール経由でコマンド実行したりできる設定してたけど,ここ5年くらい使ってないし,どこからでもAndroidとかでSSHしたりできる時代だし,もういらないな.
メールサーバをAppsに移行してて気づいたのだけど,appsのメールアドレスはGoogleアカウントの予備のメールアドレスにできないのか.まぁ,確かにどちらにログインするか曖昧になってしまうから仕方ない.
いまのうちにドルを円にしておく.PayPalから引き出すときに,みずほ銀行使ったら電話かかってきて面倒だったので,今度は楽天銀行を使ってみる.
今日は早めに帰ってきたのだけど,微妙に熱っぽいので寝る.
*VPS
さくらのVPSもう一台遊び用に借りようかと思ってたところだったのだけど,約款改定のお知らせメールが来て,VPS 512が無くなることを知りました.
Webにリニューアルのお知らせが出てたので見たら,1Gが980円になるっぽい.しかもHDDが100GBに.
http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=620
1Gを2つ契約するか,それよりも2Gを借りて1台でやりくりするかちょっと迷うな.
映画見たりカラオケ行って寿司食べたりする日.
とても眠い…….
有給とっておいたので休みです.
*Agile do IT !
http://dena.jp/recruit/open_seminar/agiledoit/
あんま開発手法とか興味が無い(大学の研究はそれが専門だった気がしないでもない)のだけど,せっかくだし最近どうなのかという情報を得る意味でも参加.あとは,無料だしご飯食べれるしというのも.
それにしても,15時~20時は疲れる.5時間か.
*Google Appsのプライマリドメインを変更しようとして紆余曲折
とりあえず,持ってるドメインは1つのGoogle appsにぶら下げてみてるのだけど,なんとなくプライマリドメインは,ほとんど使ってないドメインじゃなくて,このサイトのbinzume.netにすべきな気がする.今はbinzume.netのメールはレンタルサーバからgmailに転送しているけどappsのgmailから転送する方が管理も楽そう.
というわけで,変更の仕方を調べる.
ヘルプを見ると「プライマリ ドメインの変更」というそれらしい項目があったので読んでみると……プライマリドメインは変更できないっぽい.http://support.google.com/a/bin/answer.py?hl=ja&answer=54819
ならば仕方ないので手順に従って新しくbinzume.netを新しいアカウントで登録する.
登録してから気づいたのですが,今ってappsの無料版を登録すると10個しかアカウント登録できないんですね.10個でギリギリ足りるような気もするのだけど,ひとつのappsで複数ドメインを管理してて,それぞれに実験用とか使い捨てのアカウントがあったりして微妙な数になっている.
それなら,気に入らないけど昔作ったappsのアカウントを使いまわすことにして,作ったばかりのアカウントは削除する.削除したばかりのアカウントのドメインは5日待たないと別のアカウントに追加できないので,続きは来週だな.
たくさん寝た.
*Github に push したら自動的にデプロイする
特定のリポジトリに push したら hooks/post-receiveでサービスをデプロイという設定をしたのですが,githubにもpost-receiveがあるっぽいです.せっかくなので使いたい.
http://help.github.com/post-receive-hooks/
HTTPで通知が飛んでくるので適当なcgiを叩かせれば簡単にできそうです.
httpdを起動している apache ユーザにファイルの配置をやらせたくないので,デプロイ用のユーザで処理させたい.あと,将来的に複数サーバへのデプロイもまとめてやる可能性も考慮してssh経由でやることに.
あとはこの辺を参考に→ http://d.hatena.ne.jp/viver/20110402/p1
-
httpdのユーザー : apache
-
デプロイ処理をするアカウント : svn
gitなのにsvnさんがデプロイするのは気にしない.
apache
まず,ssh-keygenでデプロイ用キーを作ります.パスフレーズ無しで.ちょっと怖いですが,秘密鍵をapacheユーザで読めるところに配置してください.どうせデプロイコマンド以外は叩けないので,そんなにリスクは高くないはず.
次にデプロイ時にアクセスするCGIを設置.とても適当なのであとでちゃんと書く.
deploy.cgi :
#!/usr/bin/ruby -Ku
require 'cgi'
cgi = CGI.new
project = cgi.params['project'].join
unless project =~ /\A[\w-]+\z/m
puts cgi.header({'type'=>'text/html', 'charset'=>'UTF-8'})
puts "INVALID_PROJECT"
exit
end
$stderr = $stdout
puts cgi.header({'type'=>'text/html', 'charset'=>'UTF-8'})
puts `ssh -i /var/www/svn_id_rsa svn@localhost deploy #{project}`
puts "OK"
/var/www/svn_id_rsa は実際の場所にしてください.
svn
まず,デプロイ用スクリプトを適当に書きます.
~/deploy/update.rb:
#!/usr/bin/ruby -Ku
project = ARGV[1]
unless project =~ /\A[\w-]+\z/m
puts "INVALID_PROJECT"
exit
end
unless File.exists?(File.dirname(__FILE__)+"/"+project)
puts "NOT_FOUND"
exit
end
puts "deploy:#{project}"
system("cd #{File.dirname(__FILE__)+"/"+project}; git pull")
system("cd #{File.dirname(__FILE__)}; sh #{project}-update.sh")
とてもいい加減ですが,gitからpullしてきた後,[プロジェクト名]-update.shを実行しています.ファイルの配置とか色々はそっちのシェルスクリプトでやる感じで.
次に,apacheユーザで作った公開鍵を.ssh/authorized_keysに追加.
このとき,
command="./deploy/update.rb $SSH_ORIGINAL_COMMAND",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa ~~~
みたいな感じに書いて,変なコマンドは実行できないようにしておく.
ここで,./deploy/hoge にプロジェクトhogeをcloneしておきます.必要なら,hoge-update.shも作っておく.
あと,事前にknown_hostsに登録しないとだめなので,最初に一度だけapacheユーザでログインしておく.
sudo -u apache ssh -i /var/www/svn_id_rsa svn@localhost deploy hoge
ここで,.ssh/known_hostsが作れないとか,秘密鍵のパーミッションがおかしいとか言われたら,良い感じに直してください.
おわり
あとは,deploy.cgi?project=hogeをブラウザから叩いて,正常に処理が走ることを確認したら,githubのpost-receiveに登録して終わり.
githubから来るpayloadまったく見ていないとか,気にしない.
*[perl] Yada Yada Operator
Perlで sub hoge{...} (「...」は実際にピリオドが3つ)みたいなのを見て,実行してみるとUnimplemented となる.
変なモジュールで怪しいことやってるのかと思ったら,Perl 5.12.0で新しく増えた演算子なのか.それにしても,名前がYada Yada Operator…….Perlの演算子の名前は適当感がすごい.そういうの嫌いではないけど.
Perlは5.10になったあたりから新しい機能とかチェックしてなかったけど,今もちゃんと進化してるのか.正規表現のrオプションとか,もっと早く入れて欲しかったです.
Subversionからgitにするならgithubで良いような気がしてきたので,徐々に移していくことに.
昨日のmsysgit+plinkでダメな件は,サーバー側で変なwarning出てたのが原因で解決した.どうも,この組み合わせのときだけレスポンスに不要な行があると「fatal: The remote end hung up unexpectedly」とかで終了してしまう上に,レスポンスについては何も表示してくれない.msysgit側にも問題ありそうだな.
*Rubyもう少し頑張って欲しいなぁ
面倒で調べられてないけど,rubyのスクリプトにでかいデータ食わせると,インタプリタ本体ごとお亡くなりになること多いな.ファイルI/O周りで死んだりするので,Windowsのrubyがダメなのかも.
rubyで書く→遅いor落ちる→perlで書き直す,ということがたまにあるので,未だにPerl離れができない.
RubyはWeb用言語だからでかいデータに向いてないと言われたらそれまでなんですが.
円安進んでるな.ドルを円に換えるのを少し待ってれば良かったかも.
kstm.orgでChawというプロジェクト&リポジトリ管理ツール使ってるのですが,ssh://example.com:1234/hoge.git みたいな形式のURLが扱えない.SSHのポートが22じゃないと.ssh/configを書いたりしないといけないのが面倒なので,ちょっと直す.
Invalid Projectとか言われるので,パスの先頭に/がついてるとダメなんだろうなと思って,該当箇所を探す.
git_shell.phpのプロジェクト名を取得してるところに1行足して,
$project = @$this->args[1];
$project = preg_replace("/^'\\//","'",$project);
こんな感じに無理やり対応.
PHPとか久しぶりに触った.ソース見てるとなんだか不安な気分になるな
あとは,なぜか msysgit+plink で接続したとき上手くcloneできないのをどうにかしたい.plinkで大丈夫だとPuTTYと鍵を共有できるので管理がちょっと楽になる.
*みずほダイレクトの入出金明細照会は3ヶ月分しか取得できなくて意味無い
みずほダイレクトの入出金明細照会は3ヶ月分しか取得できなくて意味無いので,cronで取得していたデータのログからスプレッドシートに移す.2010年9月以前のログがどういうわけか見つからなかった.なんで消えたんだろう.
ついでに,過去1年間の明細から支出の割合を調べてみる.
普段何にお金使ってるか意識しないのでこうやって見直してみるのも良いかも.ATMで引き落としてる額が意外と多かった.現金を使いすぎかも.ただ,別の口座に紐づいてるクレジットカードも使ってるので,実際はカードの割合はもう少し高くなる.
家賃を抜いた支出が前年度の倍くらいになってる気がするので,少し抑えたほうがいいのかもなぁ.
電気代が無くて変だと思ったけど,引っ越したときにクレジットカード払いに変更したんだった.
朝からミーティングなので早く起きて会社に……眠い.社外の人とのミーティングは午前中になることが多くて大変.
昨日書いたスクリプトはちゃんと動いている感じで安心.
*確定申告
申告は昨日済ませたので,銀行に行って税金払ってきた.
納付書持ってったら,あとは銀行の振込用紙貰って名前とか金額書くだけだったので,思ってたより難易度は低かった.確定申告するの面倒くさそうと思ってたけど理不尽に面倒なことは意外と無くて良かった.
思っていたよりはマシだったけれど,もう少し何とかならないのかなあ.Webで名前とクレジットカード番号と金額入れてクリックするだけとかにして欲しい.
次は電子納税とやらに挑戦してみたいけど,専用ソフト入れろとか書いてあって,明らかに無理そう.Web版もあるのだけど,「e-Taxソフトのダウンロードやパソコンへのインストールをせず」申請できると書いてあるのに,IE用の謎のEXEファイルをダウンロードして実行する手順があって,理解できない.
そろそろ確定申告しないといけない気がしたので,税務署行ってくる.納付書貰ってきたけど,銀行混んでたので明日にしよう.
*[ruby] みずほ銀行の口座情報をGoogle docsに同期
通帳の記帳とか面倒くさくて実質不可能だし,みずほダイレクトはログイン難しくて人間がやる作業とは思えないので,みんな似たようなことやってるだろうけど,コードとか貼っておく.
毎回思うけど,コードを日記に貼り付けると,なんだか手軽にそれっぽくなって良いですね.
Google Spreadsheet用のライブラリとみずほダイレクト用のライブラリが,別々のhttpclientを使ってるのがいやだったので,同じもので動くようにした.クッキーの扱いが不完全なせいで,無駄なアクセスしているのを後で直そう.
というわけで,はてなグラフからGoogle docsへの移行は完了.近いうちに古いやつはcronから消す.過去の情報もインポートしておきたいけど,はてなグラフには日ごとの残高しか記録してなったので,ログから復元するか….
みずほダイレクト,以前は何か操作をミスする度に10分間ロックされてしまって,デバッグ面倒くさかったのだけど,もしかしてそういう制限なくなった?
ソース: https://github.com/binzume/mizuhodirect2googlespreadsheet-ruby
#!/usr/bin/ruby -Ku
require "rubygems"
require 'yaml'
require 'time'
require_relative "mizuhodirect/mizuhodirect"
require_relative 'googlespreadsheet/spreadsheet'
mizuho_account = YAML.load_file('mizuho_account.yaml')
google_account = YAML.load_file('account.yaml')
spreadsheet_key = "*******************************************"
# spreadsheet
session = GoogleSpreadsheet.login(google_account['email'], google_account['passwd'])
ws = session.spreadsheet_by_key(spreadsheet_key).worksheets[0]
# find last (FIXME!
last = ws[ws.row_count]
unless last[0]
last = ws[ws.row_count-1]
end
# mizuho login
m = MizuhoDirect.new
unless m.login(mizuho_account)
puts "LOGIN ERROR"
end
begin
account_status = m.get_top
puts 'total: ' + account_status["zandaka"].to_s
st = nil
account_status["recentlog"].each{|row|
if Time.parse(last[0])==Time.parse(row[0]) && last[1].to_i == row[1] && last[2].to_i == row[2]
st = row
end
}
account_status["recentlog"].each do |row|
if st
if row == st
st = nil
end
next
end
p row
ws << row
end
ws[ws.row_count,5] = account_status["zandaka"]
ensure
m.logout
end
puts "ok"
それにしてもrexml遅いなーと思って,rexmlのソース読んだら納得した.読んでて面白いけど,もう少し普通で高速なxmlライブラリを標準にしてほしいな.
スキーして温泉入って寿司食べる日.
*スキー
5時に家を出る.とても眠い.
雪が湿ってて重かったけど,この時期にしては良い感じ…かな.天気も良い…というより暑かった.
せっかく新潟まで来たので寿司を食べて帰る.昼もスキー場で海鮮丼食べた気がするけど.
回転寿司の店で回らない寿司を食べた.おいしい.どうも注文の単位が2つずつだったようで,想定の2倍出てきたりしたけど,特に問題は無かった.
今年はまだ2回しか行ってないので,もう一度くらい行きたいなぁ.
それにしても新幹線は速いし楽だし良いですね.
*風邪引いた
だるいので寝る.熱とかは無い.明日スキーなのだけど大丈夫かな.
書きかけだった,みずほダイレクトとGoogle docsのスプレッドシートを同期するスクリプトを書こうと思ったら,土曜日22時以降はインターネットバンキング使えないらしい.利用時間外でも参照系の操作だけでもできるようにしといてよ,と思ってしまうのど.
AdMobのアカウントをGoogleアカウントと紐付けてからAPIにアクセスするときの認証が上手くいかなくなってしまってたのだけど,API用に読み取り専用のパスワードを発行できるのでそれを使えばいいのか.
*[ruby] Rubyでみずほダイレクトにアクセスする
https://github.com/binzume/mizuhodirect-ruby
ずっと使っていたコードを公開しました.二年前(2010-02-16)に書いたやつです.
使いにくいのでもう少しどうにかする予定です.
眠い.
*[ruby] Google Spreadsheet API for Ruby
昨日書いたRubyからGoogle Spreadsheet API呼ぶライブラリを公開しておきます.標準のライブラリだけにしか依存してないのでたぶん簡単につかえます.
https://github.com/binzume/simple-googlespreadsheet-ruby
サンプル:
require_relative 'spreadsheet'
email = "your_gmail.com_account"
passwd = "*************"
spreadsheet_key = "*****************************************"
# login
session = GoogleSpreadsheet.login(email,passwd)
# get first worksheet
ws = session.spreadsheet_by_key(spreadsheet_key).worksheets[0]
# sheet name
puts ws.title
# get A2 value ( ws[row, col] )
p ws[2, 1]
# update A2
ws[2, 1] = "aihghaop"
data = [
["asdfghjk", "hoge", "12345"],
["0", "ma<>'aaa", "ag@aga"],
]
# fill A3,B3,C3 , A4,B4,C4
ws.set_cells(3,1,data)
せっかくなので,gemのgoogle-spreadsheet-rubyとそっくりにしてみました.ソース見れば分かりますが,無理やりです.
ws[2,1]とかに代入すると,即座にワークシートのセルに書き込まれます.まともなブラウザで開いていればすぐに画面にも反映されるので,見ていても面白いかもしれません.一応,矩形の範囲に一気に値をセットしたりできますが,この辺は良いインターフェイスを後で考えよう.
ずっと自分用のSubversionリポジトリで開発してきたけど,今後はなるべくGitHubとか使っていこう.仕事で使うのも最近はsvnからgitになりつつあることだし.
gitはプロジェクトごとにリポジトリ分けないといけないのが一番面倒なのだけど,GitHub上でモジュールの依存関係の管理まで一緒にやって欲しくなるなぁ….
rubyは[]と[]=で演算子が分かれてるのが良いですね.C++も分けてくれればstd::mapの実装とかもう少しきれいになった気がします.
髪切った.家を出たついでに秋葉原まで行って特に何をするわけでもなく帰ってくる.
*Google Spreadsheet API使ってみる
はてなグラフを銀行の預金残高とかの管理に使ってたのだけど,通帳代わりに使うには不便を感じてきたので,Google Spreadsheetに移行することに.
rubyからSpreadsheet APIを叩くライブラリを探したけど,あんまりよさそうなのが見つからず.一応,いくつか見つけたけど,やりたいことの割りに依存する物が多すぎな感じで好みじゃないのと,中を見たらすぐに作れそうだったので,APIのリファレンス見ながら書いてみることに.インターフェイスはgithubで見つけたやつになるべく合わせる.
とりあえず,スプレッドシートの読み書きは簡単にできたので,近いうちに口座の情報を取ってくるスクリプトに組み込もう.
*[Android] アプリの統計情報が新しくなっていた
Android Marketのアプリの統計情報が新しくなっていた.一日のインストール数とかアンインストール数とか,アップグレード数が見れるようになったし,それらをキャリア別とかバージョン別にも表示できる.
バージョンごとのユーザー数を見ると,2/3くらいのユーザは最新版にアップグレードしてくれて,残りの人は古いバージョンを使い続けているようです.
ニコニコPlayer(仮)について見ると,最近になって一日あたりのインストール数とアンインストール数が釣り合ったようなので,このままだとこれ以上はユーザー数増えないということが分かった.
またまた,午前中に社外で会議があるので朝から出かける.
今日も午前中から予定があるので朝から会社に.とても眠い.なんだかニコニコ動画のAndroidアプリがauのユーザー向けにリリースされたようですね.