2011-05-01 [長年日記]
_ RubyでGoogle Calendarを扱うライブラリ超簡単比較メモ
gcal4ruby
GCal4Ruby « Cooking And Coding
event の delete ができない
googlecalendar
Googlecalendar – Ruby api and Rails plugin for Google Calendar
使い方
g = GData.new g.login( mail, password ) c = g.find_calendar( name )
- events の取得方法がよく分からず
- scan しようとしたら認証を要求された。login の意味は?
未完成なのか API の変更に追随してないのか?
gcalapi
GoogleCalendar ― Google Calendar API
- events も取れて delete もできるっぽい
- 雰囲気が googlecalendar に酷似している
- service が新たに登場している
カレンダーの取得
s = GoogleCalendar::Serview.new( mail, password )
cals = SimpleRSS.parse(s.calendars.body)
cal = cals.find { |c| c.title == NAME }
c = GoogleCalendar::Calendar.new( s, cal[:link] )
イベント全消去
c.events.each { |e|
e.destroy!
}
イケるっぽい。
イベント作成
e = c.create_event e.XXXX e.save!
ということで 自作のツール では gcalapi を使うことにした。
2011-05-02 [長年日記]
_ FasterCSVでの改行の扱いメモ
日本語で改行入りのデータにうまく対応できるだろうか。以下、FasterCSV 1.5.3 で実験。
まとめ
FasterCSV は改行コードは LF でも CRLF でもどちらでも良い。レコードセパレータとしてもセル内の改行としてもどちらでも良い。ただし、当然セルは " " で囲まれていないとダメ。
実験
OOo calc のデータ
| RS | LF |
| セル内改行 | LF |
大丈夫。
全部CRLFのデータ
作ってみた。
| RS | CRLF |
| セル内改行 | CRLF |
問題なし。
Excelを想定して
Windows の Excel が手元になかったので教えてもらった通りにデータを作成してみた。
| 文字コード | Shift JIS |
| RS | CRLF |
| セル内改行 | LF |
全体を LF にしたあとに行末だけ CR を付加した。
問題なし。
結果
FasterCSV は文字コードが UTF-8 なら改行コードは LF, CRLF のどちらでもよい。これはレコードセパレータとしてもセル内の改行としてもどっちを使っても良いという意味。セルが " " で囲まれていればその外の改行をレコードセパレータと解釈してくれる。
改行を含んでいるのに " " で囲んでいない場合は Malformed CSV になる。
Shift JIS のデータはそもそも食えないので与える際に NKF で文字コードを変換してある。
2011-05-03 [長年日記]
_ EvoのExifデータが貧弱すぎる件
Singapore 用に Exif データを引っこ抜いて CSV ファイルを作る自作のツールがあるんだけど、そいつが Evo の撮ったデータに挑んで玉砕していた。なんだろうと思ったら
Evo の持ってる Exif データが想定外に貧弱
だったことが原因だった。
ほとんど
- 生の焦点距離
- ISO感度
くらいしか情報がない。35mm換算の焦点距離とか、絞りとかシャッタースピードとかさっぱり分からない。すごいなぁ。
_ CTUのファームウェアアップデートをした
出かける直前に><
- 突然自宅サーバの DNS サーバが一部のゾーンだけ名前解決できなくなる
- CTU のランプの点滅に気づく
- 何の更新だろうと思って調べると*1ファームウェアのアップデート
- 確かこいつ普通に DNS 引いて TCP/IP で外出て接続した先に管理画面あるんじゃね?
- WiFi ルータ越しだし、今 DNS (一部)引けないですけど?
ぷちパニック。
- 深呼吸。
- そうか、有線で直結して DHCP を受け取ればイケるか?
- OK
- ブラウザから再起動ボタン押した。WiFi ルータがネットワーク接続をロストしたのを確認。
- 待つ。
- 復活!
※ できれば自動で、最低でも単体でアップデートできるようにしてくれないかなぁ。
*1 ググったりはできる
2011-05-04 [長年日記]
_ Mac + EvoでUSBテザリング = EasyTether
Evo は一応 au で初めてテザリングを公言できる端末で、USB テザリングも WiFi テザリングもできて、3G でも 4G(WiMAX) でもテザリングできる。
WiFi テザリングについては特に難しいところがなかったのだけど、問題は USB テザリング。というのも、USB テザリングするためには HTC 純正の HTC Sync を使うんだけど、これが Mac で動かない。ということに気づくまでしばらく時間が掛かってしまった。そうか、まさか Mac に対応してなくて Linux に対応してるとは。
ということで結局どうしたかというと従来からみんな黙って使ってた EasyTether を使う。
- EasyTether Lite を Evo にインストール
- Mac に EasyTether 用 NIC ドライバをインストール
- Evo を USB デバッグ ON で Mac に接続
- EasyTether NIC の DHCP を使うように Mac を設定
これをネットワーク環境設定で保存しておく。
うむ。便利になった。まぁ USB テザリングでなきゃダメなことってどんだけあるの?って聞かれると想像がつかなくて、だったら WiFi でいんじゃね?とも思うんだけど、
できるはずなのに方法が分からないってなんかシャク
なので調べてやってみた。以上。
[2011-05-28 追記] EasyTether は free version では https が block されてしまうので Twitter にも Gmail にも Evernote にも github にも支障が出る。気づいてなかった。
また、NIC をソフトウェアで再現しているせいなのか、WiFi テザリングよりも上りが遅くて PC 全体の性能も落ちるような感じがした。WiFi テザリングのできる Evo では素直に WiFi テザリングするのが正解なんだろう。
2011-05-05 [長年日記]
_ Evoでスピードテストちょっとまとめ
au 3G(EV-DO Rev.A) と WiMAX の速度を自分の身近な環境でちょいと調べてみた。
調べてみて分かったのはモバイルのスピードテストは有線と違って触れ幅が大きいこと。一応 2 〜 3回程度計測するようにしているが、あくまで計測時点での速度であって、今この瞬間どうなのかは分からない。
タリーズ@ビーンズ金沢
3G(EV-DO Rev.A)
| 下り | 500〜900kbps |
| 上り | 240〜350kbps |
4G(WiMAX)
| 下り | 2.6〜5.4Mbps |
| 上り | 1.2〜2.1Mbps |
家
3G(EV-DO Rev.A)
| 下り | 1.3Mbps |
| 上り | 310〜360kbps |
4G(WiMAX)
| 下り | 2.9〜3.6Mbps |
| 上り | 0.65〜1.5Mbps |
WiMAX はビーンズのときは窓際だったけど家ではそうじゃないのでその差がでたかも。
実家
これだけ USB テザリング(USB テザリングの実験のついでなので)。3G のみ。WiMAX は余裕で圏外。
| 下り | 1.6Mbps |
| 上り | 470kbps |
計ったときには少しガッカリしたけど、自分の家より速いじゃん。
おまけ - テルメ金沢の休憩室のWiFi
| 下り | 13Mbps |
| 上り | 5Mbps |
これは Android 単体でアプリで計測。速すぎる気がする。たぶん誰も使ってないんだな、これ(笑)
2011-05-06 [長年日記]
_ HTC Evoは汎用のUSBケーブルで全部の操作ができる
タイトルで全部言い切ってしまった。
USB って当初の構想に反してとても複雑な規格になってしまっている。USB っぽい何かがたくさんあって、例えば身近なところではデジカメの USB ケーブルはほとんど専用になっていてお互いに融通の利かない場合が多い。
話は変わって HTC Evo についてきた USB ケーブルが結構ゴツくて長くて取り回しに不便そうだったので汎用の micro USB ケーブルを買ってみた。
ELECOM Micro-USB(A-MicroB)ケーブル 0.15m ブラック MPA-AMB015BK
予想に反して
- 充電のみ
HTC Sync- 外部メモリーモード
- USBデバッグ(USBテザリング)
のすべてが動作した。
HTC Sync はそもそも Mac 用のクライアントがないので試していないし、標準で用意されている USB テザリングも同様。
Easy Tether Lite は USB デバッグを ON にしていないと動かないが問題なく動作したので USB デバッグも行えると判断。ということで晴れて標準のゴツいケーブルは片付けておいて普段は短いものを持ち運べばよくなった。やった。
2011-05-07 [長年日記]
_ iSyncrでiTunesライブラリとAndroidを同期
Evo に機種変して PocketWiFi と iPod touch を不要にするという取り組みの中でいちばん後回しになったのが
iTunesライブラリの取り込み
だった。結論から言うと
iSyncrを使って同期することにした。
後回しにできた理由
- iTunes ライブラリには自分で rip したものと PLUS で買ったものしかない
つまり、DRM フリーの楽曲しかない。これなら余計な手間を掛けずに iTunes 包囲網から外れることができるのは分かっていた。
iTunesを捨てる気はない
iTunes はまぁよくできてる。Windows で使う場合は遅くてやってられないとかイロイロあるだろうが、実によくできた仕組みだ。「同期」という操作によって必ずバックアップが作成できる。iPod, iPhone に何かあってもそのバックアップからすぐに元に戻せる。
また iTunes Store の窓口にもなっているし、日本の iTunes Store のしょぼさを理解したうえでもとても便利なものだ。もう何枚もアルバムを買っているし、今後この窓口を捨てるのは自分にとってはちょっと現実的じゃない。今なら Amazon mp3 という選択肢も日本にできたが、あれの規模も結局期待したほどじゃなかったし、楽曲は提供してくれているが管理手法は提供していない。だったら iTunes で一本化しておいた方が楽ちん。
ついでに言うと今後一切 iOS と縁を切るかというとそれも現実的じゃない。アプリ配信のプラットフォームが iTunes である以上、これを切るのは無理だよね。
iSyncrにした理由
あんまりたいした理由はない。
- 割と紹介されている
- 値段が手頃
- とりあえず同期さえできればよかった
iSyncrの利用手順
- Android 上にアプリをインストール*1
- 起動して「準備」
- SD カード上に iSyncr アプリと license key が生成される
- PC/Mac と Android を接続し、メモリーカードとしてマウントする
- 「カード」上の iSyncr アプリを PC/Mac から起動する
- iSyncr と iTunes が起動する
- 同期したい「リスト」を選んで「同期」を開始
- 待つ
- SDカード上にリストに含まれる「データ」*2が転送されているのでこれを利用する。
ちょっと戸惑ったけど、
PC/Mac 上で起動するアプリを Android 上にインストールする
という形になっている。そのため、Windows 用、Mac 用が明確に分かれているのは注意が必要。
ちなみに再生には最初から入っていた「音楽」アプリを使っている。操作性はイマイチだけど、まぁこんなもんかなぁと思って我慢してる。
2011-05-08 [長年日記]
_ HTC Evoで使ってるアプリまとめ
とりあえず現状で一回まとめ。
- AlarmDroid
- 標準の時計のアラームのスヌーズがなぜか10分間隔固定だったので
- android.icio.us
- 文字化けせずに普通に使えそうだったので
- AndroIRC
- 他にもいくつかあったけど見た目が黒背景しばりじゃなくてちゃんとパスワードの設定ができた
- Calendar Pad
- Evo の画面をちゃんと使い切ってくれて月の表示のままでもある程度スケジュールが分かるため
- Dolphin Browser HD
- 標準のブラウザの開けるウインドウ枚数が少なすぎるため。Firefox も Opera も試してみたけどしっくりこなかった
- Dropbox
- EasyTether Lite
- Mac では HTC Sync が使えないので USB テザリングの際に必要なため
- Evernote
- Flick Note
- Simplenote は Android 公式アプリがないので
- Foursquate
- iPaper
- いくつか試した instapaper クライアントの中でよさげだから選んだはずなんだけど、なんか market で見つからない…
- iReader
- CHM Reader として
- iSyncr
- リンク先は Mac 用
- K-9 Mail
- 結構使ってる人多いみたいなんだけど、個人的にはクセが強いような気がする。気が向いたら乗り換えるかも。
- LDRMate
- ちゃんと FDLR にも対応してたので
- NHK時計
- どうしても常にアナログ時計を表示し続けていたい場合に利用
- QE Droid
- QR Droid private
- なんかとりあえず
- Rememeber The Milk
- SDReader
- ファイラ。本当はこういうの使いたくないんだけど、たぶんあった方がいいので。
- Simeji
- フリックと四方向のカーソルキーがあるため
- StarBooks
- 達人の教え により ePub はこいつで
- Task Manager
- 教えてもらった。タスクスイッチャとしても使えるのと auto kill list が便利
- twicca
- 正直操作性がイマドキどうなんだろうと思わなくもないけどキビキビ動くし総合的にはいいと思う。最近なぜか Evo だと WiFi で利用しているときによくネットワークを見失う。
- Widgetsoid
- いろんな設定や確認をホーム画面上で行えるウィジェット。Apple の OS がとてもよくできていると思うことの一つは設定操作のシンプルさ。これは OSX も iOS も変わらない。OSX に対して Windows の設定が、iOS の設定に対して Android の設定が、とてもまどろっこしく遠く感じる。だからこそこういう設定系のソフトがわんさかあるんだろう。とりあえずメモリ/バッテリの状態表示、ミュート(サイレント)、WiFi/GPS の ON/OFF, 画面の縦横の切り替えに反応するかどうか、オートロックを掛けるかどうか、USB接続時にメモリーカードモードにする、などをホーム画面から操作できるようにしてある。便利。
- ウェザーニュースタッチ
- 正直重たくてあまり好きではないんだけど、時間ごとの気温の変化が分かりやすく表示されて Android 対応のアプリはこれくらいしかたぶんない。*1
正直、不満は少なからずある。特に設定周りの煩雑さをウィジェットで補わなければいけない部分、SDカードのマウント/アンマウントで気を使わなければいけない部分、ePub, CHM のビュワー環境がかなり貧弱な部分など。
でもだいぶ慣れた。
ちなみに iOS の方は
こんな感じ。少ない。
- AeroReader
- Dropbox
- Echofon
- Evernote
- Google Mobile Apps
- Simplenote
- Kindle
- RubyHelper
有料のもの
- iChm
- iDisplay
- Limechat
- Prowl
iDisplay と Prowl は買っただけでまったく有効に使えなかった。
*1 海外のデータをもとにしてるやつはだいたいちょっとおかしい。
2011-05-09 [長年日記]
_ AndroidのSDカードの扱いはちゃんとしよう
iSyncrでiTunesライブラリと同期したとき にやらかしてしまったんだけど、
PC 側で USB マスストレージとして Android を mount したままの状態で Android 上でうっかり USB 接続のモードをメモリーカードモードから充電のみに変えてしまうとまず確実に壊れる。
実際には SD カード自体は壊れてなくて中身は普通に見えるんだけど、Android からは read only mount しかできなくなり、 PC 上で初期化しないと使いものにならなくなるみたい。
ホーム画面にこの USB 接続時の挙動を切り替えるウィジェットを置いてしまったので操作の手順を間違えないように気をつけなければ。
これって SD カードを FAT32 じゃなくて ext3 とかにすれば案外大丈夫なんじゃないの?とか思わなくもないけど面倒なので試さない。
ところで Android のメモリーカードモードって面白い。SD カードを使わない部分は正常に動くけど使うアプリは動かなくなる。だから例えば iSyncr で同期中に「音楽」プレイヤーで SD カード内の楽曲を再生することはできない。Dropbox や Evernote などでも同様。なるほどなぁ。
2011-05-14 [長年日記]
_ EMOBILEを解約した
先日電話をEvoに機種変したわけだが、EMOBILEを解約していなかった。というのも、
解約申請書にSIM貼って送ってよこせ方式*1
だったことをすっかり忘れていて、4月末に量販店のコーナーに出向いて行って、「いや、ここでは解約できないんですよ…」と残念な子扱いされて
すごすごと端末を持ち帰ってきた
りしていたのだった。
仕方ないのでその日のうちに料金プランを完全定額からスーパーライトに変更し、出費を最小限に抑えたうえで後日カスタマーセンターに電話を掛けて申請書を送ってもらう段取りにした。
のだけど、このカスタマーセンターにまた繋がらない。繋がりにくい時間帯予測が出てるので一応これを参考にして何回か電話してようやく繋がったと思ったら自動応答システムで、これがまた分かりにくい。自動応答システムって自分のように短期記憶の揮発性の高い人間にとっては地獄のようなもので、仕方ないので必死にメモを取り、7個ある選択肢の中から正解を選ぶとかイジメか!っていう解約方法を選んでどうにかたどりついた。
そしたら今度はネットワークなんとか番号は分かるか?と聞かれたが当然用意していなかったので「ない」と答えると、なんとか氏名、住所、登録電話番号と暗証番号(覚えててよかった!)で本人確認して書類を送ってもらえることとなった。
あとはちょっと Pocket WiFi の開腹に手間取った程度で普通に書類書いて SIM にハサミ入れて貼付けて投函しておしまい。今月料金は日割りで、かつ最終月の料金で残りの支払いを全部やるので○○円です、という話は確認済みなので、来月の引き落としで最後になるのかな。
まだ2年縛りは残ってるし、どうせ端末は手元にあるので慌てて解約する必要は全然ないんだけど、予備回線が欲しければエリアの広い b-mobile の方がいいんじゃないかと思うし、後回しにすると2年縛りが切れるまで忘れて延長とかになってしまうので、分かってるうちにさっさと手続きを済ませることにした。
Pocket WiFi も USB スティックもそのうち処分するつもり。
解約理由はエリアが狭くて遅いからです。田舎の電波事情なんてそんなもの。
*1 北陸にはEMショップなんてないんです! http://emobile.jp/emshop/
2011-05-22 [長年日記]
_ SQL DBMSのboolean表現
すいません、目新しい話はないです。単に自分の経験不足と忘却力過多です。
結論
- 大半の SQL DBMS には Boolean は存在せず、int の 0/1 で代用するケースが多い
- 文字列 t/f も同じように機能する場合が多い
- Boolean を持っているプログラミング言語と同じ感覚で true/false を書くとそのままの文字列が入って、どっちも true に見えたりする
以下ちょっと試したり調べた結果。
| PostgreSQL | true, 't', 'true', 'y', 'yes', '1' が true |
| MySQL | tinyint で代用 |
| SQLite | 't'/'f' でうまく動いているっぽいけどマニュアルによると Integer で代用ということらしい*1 |
| Oracle | やはり tinyint で代用 |
ということで自作の rails console 用 ModelDumper は boolean を 't'/'f' で返すようにしてみた。
A model dumper for rails console ( Rails 3 or later ) and .irbrc for rails env ― Gist
感想
なんでこんなこと書いてるかというと、一つには
Rails でも fixture の部分は ActiveRecord などを通さない
という部分をなんとなくにしか理解していなかった、というのが理由。
- rake db:seed で seed data を ActiveRecord から読み込むツールを用意して、確認用のデータは全部ここから突っ込んでいた
- 当然 Ruby の boolean がそのまま使える
- 同じ seed が使えるとは限らないのは分かっていたつもりだったので ModelDumper も書いたのだけど、まだ理解が浅かった
というコンボ。
けっこう時間を浪費してしまった…。
cf.
import seed data from .csv or .yml for Rails 2.3.4+ ― Gist
*1 試したところちょっとややこしくて、内部処理は integer なのかもしれないけど、手元の環境では 1/0 を突っ込んだらうまく解釈できなかったので、't'/'f' を入れることにした。
2011-05-24 [長年日記]
_ RailsのfixtureでCSVを使う場合は空のセルに注意
- CSV から fixture を読み込む場合、空つまり null になるはずのものが 0 になってしまう*1
- もちろん ,"", と空文字列であることを明示してあればこの限りではないが、Excel ではこのような安全なカラムを作ることができない*2
- 中にある文字列を解釈して必要に応じて " を付加してくれるが、空文字列を明示することはできない
- 空になり得るカラムが最初から fixture に存在していない場合は当然問題は起きない
ということで
fixture は YAML が安全
ということに。ふーむ。
拙作 ModelDumper は CSV でも YAML でも出力できます。
cf.
A model dumper for rails console ( Rails 3 or later ) and .irbrc for rails env ― Gist
2011-05-27 [長年日記]
_ RailsとjQueryでformの必須項目を自動強調してみた
Railsネタいっぱいたまってるんだけど全然吐き出しが追いつかない…。
基本的なアイディア
- Model.validators を利用する
- これを HTML に dump
- jQuery でこれを拾って form の DOM をいじって強調する
ActiveModel には validators というメソッドがあり、これを利用するとどんな validator が定義されているかが分かる。この中でとりあえず ActiveModel::Validations::PresenceValidator がいわゆる not null 制約なので、こいつが定義されていたら
入力フォーム上では必須項目
扱いになる。これをうまいことユーザーに feedback してあげればよい。
※ 実際に動かして確認して書いているけどデモはないので各自手を動かして作ってください。
確認した環境
- Ruby 1.8.7
- Rails 3.0.7
- jQuery 1.4.4
Controller
Controller はとりあえずこんな感じだとする。
def (new|edit) @model = Model.new end
要は新規作成でも編集でも Model の instance を Controller のインスタンス変数に持つ場合が多いよね、ってだけ。もちろんこのまま書いても動きません。
View
template にこんなものを用意。Controller で作ったインスタンス変数の class に validators が定義されているので、そいつを呼び出して、JavaScript で扱いやすい形に整形して吐く。
<div id="model-essentials" data-fields='<%=
@model.class.validators.select { |e|
e.is_a? ActiveModel::Validations::PresenceValidator
}.map { |e| e.attributes }.flatten.to_json %>'>
</div>
id は JavaScript 側から取得しやすいように付けただけで、適宜決めればよい。
JavaScript
var fields = $('#model-essentials').data('fields');
$(form item selector).each( function( i, e ) {
var self = $(e);
if ( $.inArray( self.attr('id'), fields ) >= 0 ) {
self.append($('<span>').text(' ※').css('color', 'red'));
}
});
form item selector は form の各入力項目をなめるための selector になる。また上のコードでは各入力項目に model の field と同じ id が振ってあるといういちばん簡単な状態を想定している*1。
ここでは form の各入力 field のラベルに相当する部分に赤い ※ を付け加えることを意図している。恐らくラベルと input タグは分離していると思うので乱暴に append しているが、構造に合わせて調整してほしい。
気づいたこと
schema や Model, Spec だけを眺めているより実際の form の形になってみた方が
「これ必須になってないけど変じゃね?」と気づきやすい
ことが分かった。仕様の確認にも使いやすいかも。
あと jQuery.data() で JSON 形式のデータを取得したら String じゃなくてちゃんと Array で返ってきた。賢い。
*1 HTML の構造がちゃんとなめやすいものになっていないと面倒くさいので、ちゃんと考えて構造を作りたいですね。まる。
2011-05-30 [長年日記]
_ TestDiskでHFS+の外付けディスクのパーティションを救おうとして失敗
こういうの得意じゃないんだよなぁ。
- Macでフォーマットした外付けHDDのパーティションテーブルが飛んだっぽい
- 普通に接続してもパーティションを認識できない
を教えてもらったが、UBCD の TestDisk では USB 接続の外付けディスクは見えない(UBCD なので当たり前かもしれない)。
- バラして繋いでみると TestDisk からパーティション自体は見える
- 復旧しようと試みたが APM ( Apple Partition Map ) は対応してないし、pdisk 使えと言われる
- pdisk なんて知らないし、泣きながら調べる
- NetBSD 辺りが由来の partition 操作ツール
- 言われるがまま操作してみる
- なんとか作業終わる
- Mac に繋ぐとパーティションそのものは認識できたような気がするが結局 mount できない
- 強制的に mount しようとしてもやはりダメ
詰み orz
本当は
他に十分な容量のあるディスクがあれば
- Mac 以外で mount を試みる
- とりあえず dd でコピーしてあれこれ試みる
という手があったんだけど、残念ながら手持ちに十分な余裕がなかったのでこんな結末に…。時間などモロモロの判断で結局再フォーマットして使うことになった。無念。
バックアップ用のハードディスクだったらしいけど、バックアップにするなら通電させておいた方がいいと思うよ。自分も以前「電気入れたらバックアップディスクが壊れて数年分の思い出が飛んだ」ことあるから。
それはともかく、Intel GUID なパーティションなら TestDisk 単体で復旧できるみたいなので、今後はまだ少しマシになるかもしんないな。というか
- 飛ぶと困る HDD は必ず冗長化
- 常に予備の大きめのディスクを確保
だよな、やっぱ。
うっ。私物ノートのディスクは十分な冗長化がなされていないな。まずいまずい。いずれ自宅サーバをでかいのに換装して丸ごとぶちこむか、重要なデータはそもそも残さないようにした方がいいな。テキストデータについてはもう少し頑張ればなんとか実現できそうな気がするなぁ。