« 2010年01月 | メイン | 2010年03月 »

2010年02月 アーカイブ

2010年02月07日

iPhone/iPod touch向けトラックアップ地図の機能拡充

年始に作成したトラックアップ地図を少しずつ機能を追加してきた。
デモモードを実装したので、iPhone/iPod touchを持っている人は是非見て欲しいと思う。
デモモードは現在地を内部的に変更し、トラックアップ地図が移動時にどのような挙動を示すのかを確認する事ができる。
デモムービーを撮っては見たけどボケててみにくい。
実際に使用するには次のリンク先を使って欲しい。
主な機能と技術的なことについて書いてみる。特出して目新しい機能はないが、注目して欲しいのはブラウザ上で動いているということ。Webアプリでもここまでできる。
地図の拡大縮小
Safariの独自イベントであるgesture系のものを使い、ピンチアウト/ピンチイン(二本指で画面に触れ、指を広げる/狭める操作)で「地図の拡大縮小」ができる。拡大縮小にはGoogle MapsのAPIを使用している。ズームの比率が表示されないのは既知の不具合。ロジック的には問題はないはずだけど原因は不明。
地図の回転
常に北を上に表示する「ノーズアップ機能」、常に進行方向を上に表示する「トラックアップ機能」(ヘディングアップ機能と言われることもある)がある。この両方の機能をオフにすると、ピンチ(二本指で画面に触れ、回転させる操作)で視点の方向を自由に変更できるようになる。位置情報取得に使っているgeolocationというAPIでは、位置情報だけでなくheadingプロパティで向いている方向もわかるはずだが、Safari mobile for iPhoneOSでは対応していないようだ。このため、トラックアップ機能は、現在地と直近の位置から向いている方向を推定している。ピンチの検出にはSafari mobileのgesture系のイベントを利用し、地図の回転にはCSSのTransformのrotateを使用している。
バーズアイビュー機能
「バーズアイビュー機能」カーナビのように、進行方向後方上空から、現在地を見下ろすように表示する機能。この機能がオフの場合、現在地の上空から真下を見下ろすような視点となる。バーズアイビューはCSSのTransform 3Dで実現している。
地図の表示位置変更
「現在地の自動追尾機能」をオンにすると、現在地を常に画面の中心(バーズアイビュー機能では画面下方)に表示する。自動追尾をオフにすると、ドラッグ操作(もしくは画面を指で弾くフリック操作)で表示位置を変更できる。ドラッグ操作はSafari独自イベントのtouch系のイベントで検出し、表示位置の変更にはGoogle MapsのAPIを使用している。
問題点等
地図の回転等のスクラッチで実装した部分は操作が機敏だけど、地図の表示位置変更と拡大縮小は動きが遅い。これは、Google MapsのAPIを想定されていない使い方をしているためだと思う。特に、地図の中心位置を変更するsetCenterやpanBy,panToはパンのアニメーションが入ってしまう(正確には、setCenterは移動距離が短い場合のみパンとなる)。
以前のバージョンの一番の問題は著作権表示で、地図を回転させる事で著作権表示が画面外に出てしまっていた。表示領域に外接するように地図のサイズを変更していたので、回転角が90度の倍数に近い場合は表示されていたが、逆にいうとそれ以外では表示されていなかった。今のバージョンでは地図を二枚重ねにしてなんとか表示させている。ただし、まだ問題が残っていて、ユーザの操作をイベントとして受け取るDIV要素が全画面を覆っているため、著作権表示部分のリンクをクリックできない。これもなんとかしたい。
位置情報をこちらに送信したくない場合は、Githubに公開しているソースを自分のサーバに設置するか、iPhone/iPod touch内に保存して利用して欲しい。(といっても、コードを見てもらうとわかると思うけど、こちらに位置情報を送信するような処理は入っていない。)

2010年02月13日

Transform3Dの応用例 for iPhone/iPod touch

TrackUp地図作ってて気付いたんですが、CSS3のTransform3Dは、iPhone/iPod touchのタブ切り替えの画像には反映されないんですね。
そこで、これを何かに応用できないかと色々考えてみました。リンク先はデモになっています。
文字ばかりのページだと、一瞬どこのページなのかわかりにくいので、サイト名を表示するのはどうでしょう。
提供を表示するのも良いですね。
カレンダーが表示されると便利です。
閉じて欲しくない時に。
閉じて欲しい時に。
驚いて欲しい時。これはこわい。
合せ鏡。何かが出てきそう。
じゃんけん。タブ化するたびに変化します。
まとめ
えぇっと、多分これはSafariのバグっぽいのでPhoneOSの次のバージョンでは使えない可能性があります。なので、この方法を使っても短命に終ると思います。やらない方が良いでしょうね。

2010年02月25日

gitコマンドの足し算

gitのコマンドは、複数のコマンドをまとめて実行するためのものもあるとか。
gitの勉強中に見つけたものを列挙してみた。
ただし、一部はニアリーイコール。
[git gc]                    = [git repack]             + [git prune]
[git pull origin master]    = [git fetch]              + [git merge origin/master]
[git commit -a]             = [git add -u]             + [git commit]
[git commit --amend]        = [git reset --soft HEAD^] + [git commit -c ORIG_HEAD]
[git checkout -b newbranch] = [git branch newbranch]   + [git checkout newbranch]
gitは低レベルのコマンドを組み合わせて高レベルのコマンドを実現しているようなので、この他にも沢山あるはず。
(加算ですが)因数分解して関連図のようなものがあれば面白そう。
2010/02/25 追記
「git commit -a」を「[git add *] + [git commit]」としてたんだけど指摘を頂いた。
@kanasan git commit -aはgit add -u + git commitじゃない?commit -aはUntracked files:はaddしない、と。 #git
確かに。
いまいさん、ありがとうございます。
本文は修正済。

2010年02月28日

Gitのサブコマンドの概略を訳してみた

自分の環境のzshで「git 」と入力後にtabを押したら表示されるサブコマンドの一覧を訳した自分用のメモ。
これくらいの英語はサラッと読めるようになりたいけどそうも言っていられないので...。
意訳と直訳が混在しているし、多分内容も随分間違えているはず。
間違いがあったら遠慮なく指摘して下さい。
gitのコマンドはコマンドを多く覚えるよりも、基本的なコマンドのオプションを覚えた方が良さそうなのであまり役に立たないかも...。
バージョンは1.6.2.1。
add                 -- インデックスにパスを追加 -- add paths to the index
am                  -- メールボックスからパッチを適用する(applymboxよりもかっこいい) -- apply patches from a mailbox (cooler than applymbox)
apply               -- Gitインデックスファイルとワークツリーにパッチを適応する -- apply patch on a git index file and a work tree
applymbox           -- メールボックスからパッチを適用する -- apply patches from a mailbox
applypatch          -- Eメールから抜き出したひとつのパッチを適応する -- apply one patch extracted from an e-mail
archimport          -- Arch(というバージョン管理システム)のレポジトリをGitにインポートする -- import an Arch repository into git
bisect              -- バグが混入した変更を探す find the change that introduced a bug
branch              -- ブランチの作成と表示をする -- create and show branches
cat-file            -- リポジトリオブジェクトのコンテンツまたはタイプの情報を提供する -- provide content or type information for repository objects
check-ref-format    -- 参照名が正しいかを確認する -- makes sure that a reference-name is well formed
checkout            -- ブランチのチェックアウトと切り替えをする -- checkout and switch to a branch
checkout-index      -- インデックスからワーキングディレクトリにファイルを複製する -- copy files from the index to the working directory
cherry              -- 上流(のリポジトリ)にマージされていないコミットを探す -- find commits not merged upstream
cherry-pick         -- 既存のコミットの効果をつまみ食いする(一部だけ適応するの意) -- cherry-pick the effect of an existing commit
clone               -- リポジトリを新しいディレクトリに複製する -- clones a repository into a new directory
clone-pack          -- リポジトリを現在のリポジトリに複製する(移す) -- clones a repository into the current repository (transport)
commit              -- 変更をリポジトリに記録する -- record changes to the repository
commit-tree         -- 新しいコミットオブジェクトを作成する -- creates a new commit object
convert-objects     -- 古い形式のGitリポジトリを変換する -- converts old-style git repository
count-objects       -- パックされていないオブジェクトの数とそれらのディスク消費量を表示する -- count unpacked objects and display their disk consumption
cvsimport           -- CVS(というバージョン管理システム)のリポジトリをGitにインポートする -- import a CVS "repository" into a git repository
daemon              -- Gitリポジトリのための本当に簡単なサーバを起動する -- starts a really simple server for git repositories
diff                -- コミットとコミットや作業ツリー等との間の変更を表示する -- show changes between commits, commit and working tree, etc.
diff-files          -- 作業ツリーとインデックス内のファイルを比較する -- compares files in the working tree and the index
diff-index          -- インデックスとリポジトリ間のコンテンツとBLOBのモードを比較する -- compares content and mode of blobs between index and repository
diff-stages         -- インデックスファイル内のふたつの"マージステータス"を比較する -- compares two "merge states" in the index file
diff-tree           -- ふたつのツリー経由でコンテンツとBLOBのモードを比較する -- compares the content and mode of blobs found via two tree objects
fetch               -- 別のリポジトリからオブジェクトとHEADをダウンロードする -- download objects and a head from another repository
fetch-pack          -- 他のリポジトリから紛失したオブジェクトを受け取る -- receive missing objects from another repository
format-patch        -- Eメールで提出するパッチを用意する -- prepare patches for e-mail submission
fsck-objects        -- データベース内のオブジェクトの接続性と妥当性を検証する -- verifies the connectivity and validity of the objects in the database
get-tar-commit-id   -- tarツリーを使用して作成されたアーカイブからコミットIDを抽出する -- extract commit ID from an archive created using tar-tree
grep                -- パターンに一致した行を書き出す -- print lines matching a pattern
hash-object         -- ファイルからオブジェクトIDを算出する -- computes the object ID from a file
http-fetch          -- HTTP経由でリモートのGitリポジトリをダウンロードする -- downloads a remote git repository via HTTP
index-pack          -- 既存のパックされたアーカイブのインデックスファイルのパックをビルドする -- build pack index file for an existing packed archive
init-db             -- 空のGitオブジェクトデータベースを作成する -- creates an empty git object database
local-fetch         -- ローカルシステム上の別のGitリポジトリを複製する -- duplicates another git repository on a local system
log                 -- コミットログを表示する -- shows commit logs
lost-found          -- 運良くまだprune(コマンド)されていない紛失した参照を回復する -- recovers lost references that luckily have not yet been pruned
ls-files            -- インデックス/作業ディレクトリ内のファイルの情報 -- information about files in the index/working directory
ls-remote           -- リモートかローカルのリポジトリ内の参照を表示する -- shows references in a remote or local repository
ls-tree             -- 人が読める形式でツリーオブジェクトを表示する -- displays a tree object in human-readable form
mailinfo            -- ひとつのEメールメッセージからパッチを抽出する -- extracts patch from a single e-mail message
mailsplit           -- メールボックスファイルからファイルの一覧に分割する -- splits an mbox file into a list of files
merge               -- すばらしく統合されたマージドライバ -- grand unified merge driver
merge-base          -- マージ可能な共通の祖先を探す -- finds a good common ancestor as possible for a merge
merge-index         -- マージが必要なファイルのマージを実行する -- runs a merge for files needing merging
merge-one-file      -- マージインデックスを使用する標準のヘルパープログラム -- standard helper-program to use with merge-index
mktag               -- タグオブジェクトを作成する-- creates a tag object
mv                  -- ファイルやディレクトリやシンボリックリンクを移動やリネームをする -- moves or renames a file, directory, or symlink
name-rev            -- 指定されたリビジョンのシンボリック名を探す -- find symbolic names for given revisions
octopus             -- ふたつ以上のコミットをマージする -- merges more than two commits
pack-objects        -- オブジェクトのパックされたアーカイブを作成する -- creates a packed archive of objects
parse-remote        -- 「$GIT_DIR/remotes/」の解析を支援するルーチン -- routines to help parsing $GIT_DIR/remotes/
patch-id            -- パッチ用の一意なIDを算出する -- computes unique ID for a patch
peek-remote         -- upload-pack(コマンド)のプロトコルを使用しリモートリポジトリ上の参照を一覧する -- lists references on a remote repository using the upload-pack protocol
prune               -- オブジェクトデータベースから全ての到達不可能なオブジェクトを刈り取る(prune:枝を切り落とす|コミットの履歴が木に準えているため) -- prunes all unreachable objects from the object database
prune-packed        -- パックファイル内の既に余分なオブジェクトを削除する -- removes extra objects that are already in pack files
pull                -- リモートリポジトリからフェッチしマージする -- fetch from and merge with a remote repository
push                -- 関連づけられたオブジェクトを一緒にリモートの参照を更新する -- update remote refs along with associated objects
read-tree           -- ディレクトリインデックスからツリーの情報を読み取る -- reads tree information into the directory index
rebase              -- ローカルコミットを新しい上流のHEADに接ぎ変える -- rebases local commits to new upstream head
receive-pack        -- send-pack(コマンド)によりプッシュされたものを受信するために呼び出されるコマンド -- command invoked by send-pack to receive what is pushed to it
relink              -- ローカルリポジトリ内の共通のオブジェクトをハードリンクする -- hardlinks acommon objects in local repositories
repack              -- リポジトリ内のパックされていないオブジェクトをパックする -- packs unpacked objects in a repository
request-pull        -- 保留中の変更の要約を生成する -- generates a summary of pending changes
reset               -- 現在のHEADを指定されたステージにリセットする -- resets current HEAD to the specified state
resolve             -- ふたつのコミットをマージする -- merges two commits
rev-list            -- 時系列の逆順にコミットオブジェクトを一覧する -- lists commit object in reverse chronological order
rev-parse           -- 他のGitコマンドのためにパラメータを取り出し操作を加える -- picks out and massages parameters for other git commands
revert              -- 既存のコミットに戻す -- reverts an existing commit
send-email          -- 「format-patch --mbox」の出力のパッチEメールを送信する -- sends patch-e-mails out of "format-patch --mbox" output
send-pack           -- リモートリポジトリにすぐれたpushをする -- pushes to a remote repository, intelligently
shortlog            -- Gitログの出力を要約する -- summarizes git log output
show-branch         -- ブランチとそれらのコミットを表示する -- shows branches and their commits
show-index          -- パックのインデックスファイルの内容を表示する -- displays contents of a pack idx file
ssh-fetch           -- SSH接続でリモートリポジトリからpullする -- pulls from a remote repository over an SSH connection
ssh-upload          -- ssh-fetch(コマンド)により使用されるサーバ側のヘルパープログラム -- helper "server-side" program used by ssh-fetch
status              -- 作業ツリーのステータスを表示する -- shows the working-tree's status
stripspace          -- 空行をフィルタリングする -- filters out empty lines
svnimport           -- SVN(というバージョン管理システム)のリポジトリをGitにインポートする -- imports a SVN repository into git
symbolic-ref        -- シンボリック参照を読み込み修正する -- reads and modifies symbolic references
tag                 -- GPGで著名されたタグオブジェクトを作成する -- creates a tag object signed with GPG
tar-tree            -- 指定されたツリー内のファイルのtarアーカイブを作成する -- creates a tar archive of the files in the named tree
unpack-file         -- BLOBの中身を持つテンポラリファイルを作成する -- creates a temporary file with a blob's contents
unpack-objects      -- パックされたアーカイブのパックされていないオブジェクトを出力する -- unpacks objects out of a packed archive
update-index        -- 福数の指定された方法でインデックスを修正する -- modifies the index in some given way
update-ref          -- 参照に格納されたオブジェクト名を安全に更新する -- updates the object name stored in a reference safely
update-server-info  -- ダンプサーバの補助情報を更新する -- updates auxiliary information on a dumb server
upload-pack         -- clone-pack(コマンド)とfetch-pack(コマンド)に呼び出されるコマンド -- command invoked by clone-pack and fetch-pack
var                 -- Gitの論理変数を表示する -- displays a git logical variable
verify-pack         -- パックされたGitのアーカイブファイルを検証する -- validates packed git archive files
verify-tag          -- タグのGPG署名を照合する -- checks the GPG signature of a tag
whatchanged         -- コミットログとそれらにより導入された差分を表示する -- shows commit-logs and differences they introduce
write-tree          -- 現在のインデックスからツリーを作成する -- creates a tree from the current index
2010/02/28 追記
am,applymboxが「メールボックスからパスを適応する」となっていたのを修正。(id:ujihisaさんからの指摘)
patch-idが「Apatch(パッチ?)用の一意なIDを算出する -- computes unique ID for a apatch」となっていたがapatchではなくpatchらしい。zshの補完関数のbugかもとのこと。(id:ujihisaさんからの指摘)
2010/03/01 追記
am,applymboxが「メールボックスからパッチを適応する」となっていたのを修正。(id:nankiさんからの指摘)
Google

タグ クラウド