2014/05/06

UNIX時刻⇔DateTime文字列 変換

UNIX時刻⇔DateTime文字列の変換をガジェットっぽくしてみた。
ついでにGPSの閏秒計算するようにしてみた。
なんというか、検算用にツールにしとこうかなと思いまして。

GPS時刻は、GPS衛星の時計が打ち上がったとき(1980-01-06)の時計らしく
閏秒の補正が途中からされてない状態らしい。
# 閏秒についてちょっと難しくて実はよくわかってないのですけど。
# なんしか、原子時計とUTCはずれてくるから
# いままで合計25回(2015/06/30入れて26回)、6月末か12月末に23:59:60という時間を挿入して調整しているらしい。

挿入した閏秒
1972 0630235960
1972 1231235960
1973 1231235960
1974 1231235960
1975 1231235960
1976 1231235960
1977 1231235960
1978 1231235960
1979 1231235960
----ここからGPS時計スタート----
1981 0630235960
1982 0630235960
1983 0630235960
1985 0630235960
1987 1231235960
1989 1231235960
1990 1231235960
1992 0630235960
1993 0630235960
1994 0630235960
1995 1231235960
1997 0630235960
1998 1231235960
2005 1231235960
2008 1231235960
2012 0630235960
2015 0630235960 add

GPSの時計は、1980-01-06から始まっているから、
今(2014-05)まで打ち上がってから16回調整してない状態になっているんだね。
今は、UTC時刻+16秒=GPS時刻ということ。16秒進んでる。
いちおう過去の時刻も大丈夫、例えば1990-01-01なら6秒とか。

ソースはここにあります。

<できること>

  • 入力したUNIXEpoch[s]をDateTime文字列に変換します
  • 入力したDateTime文字列をUNIXEpoch[s]に変換します(format固定で(^^;))
  • 入力した時間についてGPS時刻で表示します

それでガジェットっぽく貼ってみた。右サイド→
[レイアウト]>[ガジェットを追加]>[HTML/JavaScript]に埋め込んでるだけ。


  • Leap seconds:
    • 入力した時刻のGPS閏秒つまり1980-01-06から調整した閏秒の総和
  • GPS Time:
    • DateTime+Leap seconds
  • Week Number(1980/1/6からの何番目の週か)
    • wn=Math.floor((epogps - 315964800) / 86400 / 7)
  • Time of week(日曜日の0時からの秒)
    • tow=(epogps - 315964800) - (wn * 7 * 86400)
epogpsは入力した時刻+Leap secondsです。
ちなみに、Week Numberは、1024までで表すから、カッコ内は、mod 1024です。

こんなイメージなのですが。
あと、いまから未来に閏秒調整があったら、リスト修正しないとダメですm(_ _)m。

参考したサイト
http://www.enri.go.jp/~sakai/pro.htm

2014/05/05

mongodbで新しいドキュメント取得

やりたいこと
あるコレクションから、
まだ取得していなくて、
新しく追加されたドキュメントを取得したい


例えば、oidが、あるOIDまで取得している状態で、
db.test.find({_id:{$gt:ObjectId(OID)}}).sort({_id:-1});
db.test.find({_id:{$gt:ObjectId(OID)}}).sort({$natural:-1});
などが思い当たりますよね。

ここでOIDは、4つに分けて
536700f5 80bedc 359f 275bc9
the seconds since the Unix epochとmachine identifierとprocess idとcounter
http://docs.mongodb.org/manual/reference/object-id/
らしいから、

これだと秒まで同じドキュメントが複数あって、それらが違うmachine idの場合に対応できないよね。

oidの2つ目のmachine idって

mongo localhost/test1 insert.js
536700f5 80bedc 359f 275bc9

mongo 127.0.0.1/test2 insert.js
536701af dc8c4c 3ebe 80a615

mongoシェルからやったら
53670229 daa151 cae9 41c342

みたいに
同じマシンでもinsertの仕方によっても違うし。

つまり、oidでsortしてもね。

ということで、1秒以内に書き込まれることを考慮したら、
.find({_id:{$gt:ObjectId(OID)}}).sort({_id:-1})では最新を取得できないよね?と思うのですよ。

ということでやっぱり自前のミリ秒くらいまでの時刻フィールド{ts : new Date()}を追加してそれで、
.find({ts:{$gt:timestamp}}).sort({ts:-1})
かつ取ってきたドキュメントでまた持ってないOIDだけに制限して使うことにするわ。


もっといいやり方ないんかね。

2012/07/05

Flex4.6にて
ViewNavigatorApplicationにおいてdestructionPolicy="never"でView遷移するときの動作についてです。
普通は、↓のようにして、pushView/popViewで遷移して、HomeViewのみインスタンスは1つだけ
という動作になります。(NextViewは毎回インスタンスが生成されます。)

これで、HomeViewにNEXTボタン、NextViewにBACKボタンを定義して
それぞれpushView/popViewで遷移するようにして、
add/creationComplete/viewActivate/viewDeactivateのイベントを定義すると
次のような順番に処理が行われます。


HomeView addHandler
HomeView creationCompleteHandler
HomeView viewActivateHandler
--push NEXT button--
NextView addHandler
NextView creationCompleteHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler
--push BACK button--
HomeView addHandler
NextView viewDeactivateHandler
HomeView viewActivateHandler     ←createしていない
--push NEXT button--
NextView addHandler
NextView creationCompleteHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler

NextViewからHomeViewに戻るときにcreateしていないことがわかります。


ここで問題。


私が作りたいアプリは、HomeViewではなくNextViewのインスタンスを1つにして、
NextViewのcreateを1回だけにしたかったのです。
いろいろ悩んた結果、次のようにしました。


NEXTボタン
 1回目HomeViewからNextViewに遷移するときは、replaceViewにして、
 2回目からは、popViewで遷移します。
BACKボタン
 NextViewからHomeViewはpushViewで遷移します。


そうすると、次のような順番で処理が行われ、
HomeViewではなく、NextViewのインスタンスを1つに保つことができました。



HomeView addHandler
HomeView creationCompleteHandler
HomeView viewActivateHandler
--push NEXT button--
HomeView [navigator.replaceView(NextView)]
NextView addHandler
NextView creationCompleteHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler
--push BACK button--
NextView [navigator.pushView(HomeView, "pop")]
HomeView addHandler
HomeView creationCompleteHandler
NextView viewDeactivateHandler
HomeView viewActivateHandler
--push NEXT button--
data=pop
HomeView [navigator.popView()]
NextView addHandler
HomeView viewDeactivateHandler
NextView viewActivateHandler     ←createしていない


dataを用いて、1回目と2回目を区別するようにする場合、こんな感じです。

// HomeViewのNextボタン押下時
protected function btnNext_clickHandler(event:MouseEvent):void
{
 if(data == null){
  trace("HomeView [navigator.replaceView(NextView)]");
  navigator.replaceView(NextView);
 } else {
  trace("data=" + data);
  trace("HomeView [navigator.popView(slideLeftTran)]");
  navigator.popView(slideLeftTran);
 }
}
でもちょっとむりくり感があります。
もっと簡単にインスタンスを1つにする方法はないのでしょうかね。

2011/02/27

キルアの手

わりとデカイ

Dell Streak (001DL) テザリングメモ



対象端末: Dell Streak (001DL) android 2.2
  • barnacle Wifi Tether というアプリ
このアプリはroot権限(su)で操作できないと動かなかった。
http://jaga30.wordpress.com/2010/07/07/【rootedなxperiaに朗報】-wi-fiデザリングが出来るアプリ「barnacle-wi/

ルート権限を取得する場合はこちら↓
http://futuremix.org/2011/02/android-pdanet-tethering
Universal androot
ビビリなのでやりたくない。

  • PCと端末の両方にいれるタイプのアプリ↓PdaNet

http://futuremix.org/2011/02/android-pdanet-tethering

PdaNet Desktop for Mac
http://www.junefabrics.com/android/mac.php
★★→これ動かなかった。

  • つづいてこれ↓EasyTether

http://t.hash.bz/archives/2223311.html
★★→これ動いた!
ここにもかいてあるように無料版ではsslのサイトはみれない。。

2011/02/06

Android携帯に音楽をコピーする

こりんごあめさんとかあさんの為の講座その2
android携帯に音楽ファイルを入れる方法について、説明します。

  1. PCとandroid携帯を繋ぐ

PCとandroid携帯をUSBで繋ぎます。

※画像はWikiから
↑こんな線を探してください。

こんな線ない!という場合は、携帯の中のmicroSDを出して、それPCに繋ぐことになります。
この場合、このちっちゃいmicroSDをPCから読み取るためのカードリーダー↓が必要になります。

※画像は、amazonから(こういうやつ)
※今回はUSB接続で、やることにします。

PCとandroidを繋ぐとandroid携帯が『ピコ』と鳴るか、バイブするか何かしらの通知があると思います。
なんもならん!という場合は、ドライバがPCに入ってないかも。
ガラパゴス003SHのドライバはこちら

私の携帯streakでは、『ピコ』と言ってUSBのマークが画面上の通知に出ます。
通知を開いて、[USB接続]をタッチします。


GalaxySはこんな↓画面ではないかもしれませんが、
『USBを使えるようにする』という内容のものを選択します。


つづいてstreakでは↓こんな画面で『OK』を押します。

すると、また『ピコ』と鳴り、USB接続が完了します。

PCでは、このとき初めてandroid携帯が繋がれたことを認識します。
↓の画面が出てきた場合は、[フォルダを開いてファイルを表示]を選択します。

この画面が出てこない場合は、[マイコンピュータ]から携帯が接続されている
ドライブ(ディスク)を選択して表示します。
D:とかE:とかF:とかG:とか・・・そういうやつです。

今回は、↓『I:』でした。
※応答なしになっているのは気にしないでください。

で、続いて、音楽ファイルを入れます。

  1. android携帯に音楽ファイルをコピーする

上の例では、android携帯のSDカードは『I:』で認識されています。
この例でいくと、『I:\media\audio\music』に行きます。
例えば、mediaというフォルダがない場合は、作ってください。
フォルダは、[右クリック]>[新規作成]>[フォルダ]で作れます。

つづいて、PCで音楽が入っているフォルダを表示します。
音楽ファイルが、
アーティスト
--アルバム1
----曲1
----曲2
--アルバム2
----曲1
----曲2
というフォルダの階層になっていても、
フォルダごとコピーしちゃいます。
↓こんな感じで、コピペします。


それなりに時間がかかります。


また、容量もチェックしましょう。
容量がいっぱいだと入りません。

ちなみに今入れたアルバムは100MBでした。
アルバムによってそれぞれ違うし、
音楽ファイルの質というか音楽をCDから取り込むときの
取り込み方によってファイルサイズは違います。
私は、いま8アーティスト30アルバムくらいで、
musicフォルダが1.9GB=1900MBでした↓。

GalaxySは買ったときに付属のカードが2GBなので、
変えた方がいいかも:)

  1. android携帯のUSB接続をやめる

つづいて、android携帯の画面を見ます。
先ほどの通知領域を開きます。
[USBストレージをOFFにする]をタッチします。

※こんな文言ではないかもしれません

GalaxySはこんな↓画面ではないかもしれませんが、
『USBを切断してSDカードを使えるようにする』という内容のものを選択します。

すると、また『ピコ』と鳴り、SDカードが携帯の元に帰って来ました的な感じになります。

べつに、USBの線をいきなり外してもいいんですけど一応手順を記載しました。


  1. androidで音楽ファイルを確認する


androidには、音楽を聴くアプリもいっぱいありますが、
ここでは、はじめから入っているもので試します。
アイコンは、ホームアプリのテーマとかによって違うので、
『音楽』とかそんな感じのアプリがはじめから入っていると思います。


おー入ってました:)メデタシメデタシ

iTunesでPCに音楽CDをから音楽を入れる

こりんごあめさんとかあさんのために、
PCで音楽ファイルを管理することについて説明します。
※PC・・・パーソナルコンピューター。パソコンのことね。

  1. iTunesを入れよう!

アイチューン(iTunes)は、PCで音楽ファイルや、動画ファイルを管理するソフトなのです。
使いやすいから使っています。
同じようなソフトとして↓いろいろあります。
・WindowsMediaPlayer
・RealPlayer
その他いっぱい
↓音楽再生ソフトを比較している人発見
高音質 : ミュージック再生ソフト比較

とりあえず、iTunesを入れよう!
iTunesここから落とす

で、インストールの方法を解説しているサイト↓があったので、これを見て入れよう!
iTunesの使い方マニュアル

※ソフト・・・ソフトウェア。PCの中で動くアプリケーションのこと。アプリと同じ?かな。

  1. CDをパソコンに取り込む

音楽CDをPCに入れると、パソコンの設定によるけど、↓こういう画面が出てきます。


ここで『曲をインポート』を選択すると、
CDの中身の音源がファイルとしてPCに取り込まれるのです。
こんな画面出てこない!というときは、手動で、iTunesを起動します。


デスクトップにある←アイコンから起動します。
そんなアイコンない!という場合は、[スタート]>[すべてのプログラム]から起動します。
←これはWindows7の画面です。

なんしか、CDをPCに入れた状態で、iTunesを起動すると、
iTunesが起動して、(iTunesの設定によるけど)
『このCDインポートしますか?』的なメッセージが出てきます。


『はい』でインポートがはじまります。



やや時間がかかります。
全部ミドリのアイコンになったら、完了です。
PCで音楽を聞くなら、ここで終わりです。
この音楽ファイルはどこに取り込まれたのでしょうか。

  1. 取り込んだファイルを、iTunesで見る

その前に、iTunesの表示方法について、説明します。
iTunesの左側メニューで[ミュージック]を選択します。
で、このミュージックの表示方法が何種類かあります。
はじめは、↓こんな感じだったと思います。

画面上の[表示]>[アルバムリスト]を選択します。したら↓こんな感じになります。

個人的にはこれが、見やすいかなと。

で、本題ですが、今さっき、BjorkさんのVespertineというアルバムを入れました。
[ミュージック]で、[アーティスト]でBjorkを選択して[アルバム単位]でVespertineを選択すると、
今インポートしたやつが出てきます。

※アルバム単位なんてない!というときは、[アーティスト]のところで右クリックして[アルバム単位]にチェックを付けます。
ふむふむ取り込めていました。

  1. 取り込んだファイルをPC上で確認する

つづいて、取り込んだファイルはPCのどこに保存されているかを確認します。
先ほどのiTunes画面で、1曲選択します。
曲の上で右クリックして[プロパティ]を選択します。



すると↓のプロパティ画面が出ます。

[概要]の下の方に[場所]があって、ここに実際の音楽ファイルがあるなぁということがわかります。
さて、ここに行ってみましょう。
C:\Users\kaneko\Music\iTunes\iTunes Media\Music\Björk\Vespertine [Bonus Track]
ファイルエクスプローラで、ここに行ってみます。

ふむふむ、音楽ファイル m4aファイルがありました。