2014年9月14日日曜日

iPhone6 plusの2年間の料金をザックリと計算

キャリアで契約した場合に、パケット制限が2GBになったり、基本料が6000円くらいになるという話を聞いたので、



  1. ドコモへMNP転入でiPhone6 plus 128GBを新規契約

  2. AppleStoreでiPhone6 plus 128GBをSIMフリーで購入し、b-mobileの「スマホ電話SIM フリーData」を1年縛り+1GBパケットで契約


上記の2パターンを単純比較してみた。


 


MNP新規でdocomo



  • 基本料金:6,500円×24ヶ月= 156,000円

  • 端末料金:36,288円


= 192,288 


 


 AppleStore SIMフリー端末+b-mobile



  • 基本料金:2,051×24ヶ月 = 49,224円

  • 端末料金:99,800円


= 149,024


 


単純計算しただけだと5万円弱の差になる。それまで使っていた、iPhone5/5s/5cの端末を下取りで売って、トントンから1万円くらいの差になる。ドコモを15年以上使っている人は、この金額から毎月600円マイナスになるらしい。


あと差が出てくるのが、ドコモは2年縛り、b-mobileは1年縛りということ。b-mobileは縛りをかけない選択も出来る(縛りをつけないとパケットが1GB/月になるので、プラス340円/月増える)。



私は当然b-mobileのプランである。


2014年9月12日金曜日

iPhone5でのMVNOテザリング

 登場したばかりの頃のiPhone5は3Gしか使えず、がっかりしていた。当時は(現在もだが)日本通信b-mobileが提供しているSIMを使っていた。


しかし、ここでネット上にとある情報が出回る。


 



docomoのSIMならばiOS6.0.2を上書きインストールすると、なんとLTEが有効になる」 



 


 検証しているサイトもいくつか現れたので、これはかなり信憑性が高い。というわけで、日本通信からMNPdocomoへ端末を持ち込みまったく縛りの無いプランで契約した(基本料だけで毎月6500円くらい)。


契約が終わったら速攻でiOS6.0.2を上書きインストールしてみると…LTEが有効になった。まだLTEで繋がるところは少なかったが、LTEで繋がるとサクサクで高速Webブラウザを堪能していた。iOS6.1が出てもLTEが無効になることをβ版で確認していたので、正式リリースされてもアップデートせずiOS6.0.2のまま使い続けた。


 ところが、iOS7βを入れてみたところ、すでにSHSHの発行が終了している6.0.2には戻せなくなり、LTEも有効に出来なくなり、快適LTE生活が終了。iPhone5sLTEが使えるようになるまで約10ヶ月、テザリングは使えるので、なんとか我慢しながら使っていた。


そして、iPhone5sが発売されたが、LTEは使えるがテザリングが使えない状態だった。なので、データ専用のSIMを契約しAndroidスマートフォンテザリングルーターとして使っていた。


 


しかーし。


 


iPhone5に、iOS8ベータを入れてみた。すると、なんと、「LTE」の文字が。ネットワーク設定を見てみるとインターネット共有がっっ。


f:id:digitarhythm:20140913091638j:plain


設定してみるとLTEな速度が出ているし、インターネット共有(テザリング)も使える。なんと!最強のアンロックiOS端末になってしまった。もしかして、iPhone5sにもiOS8を入れたらテザリングが出来るようになるかもっっ?


Formula E

 ついに!本日、日本時間9/13に電気フォーミュラーカーによる完全公道レースグランプリ「Formula E」が開幕する。FIAが主催するグランプリとしては珍しく、アメリカンレース(INDYNASCARなど)に参加しているチームのほうが多いような気がする。これは、カスタマーカー参戦が出来るためだと思われる。


 



Formula E - Official FIA Formula E Championship


 


日本ではBS朝日が放送します。


enchantとtmlibのタッチイベント

enchant.jsと、tmlib.jsのスプライトでは、発生するタッチイベント名が違う。


 


enchant.js


タッチ開始:ontouchstart


移動:ontouchmove


終了:ontouchend


中止:ontouchcancel


 


【例】



sprite.ontouchstart = (e)->


    console.log('x='+e.x+', y='+e.y) 



 


 


tmlib.js


タッチ開始:onpointingstart


移動:onpointingmove


終了:onpointingend


中止:onpointingcancel


 


【例】 



sprite.onpointingstart =(e)->


    console.log('x='+e.app.pointing.x+'y='+e.app.pointing.y)



 


2014年9月2日火曜日

tmlib0.3で音楽再生

tmlib0.3では、それまでの0.2までとは音楽の再生方法が変わっているようなので備忘録。


アセットリストに「sound」という名前で登録されているファイルを再生する場合



org = tm.asset.Manager.get('sound')


sound = org.clone()


sound.volume = 1.0


sound.play()


sound.loop = false



 


cloneしてからでないと重ねての再生が出来ないので注意。


2014年8月30日土曜日

JavaScriptでゲームパッド

もともとは「GamePad API」としてW3Cが制定しているものだが、なぜかブラウザー毎に実装がマチマチで、これまたブラウザー毎に処理を分けないといけない。
そして、2014年現在は、Chrome37と、Firefox31でしかゲームパッドは使用出来ない(SafariIEでは未実装)。


なので、実行しているブラウザを自動判別し、ChromeFirefoxの両方でほぼ同じデータの取れるものだけを配列で返すライブラリを作ってみた。


 


両方のブラウザでほぼ同じデータが取れるものは下記になる。


f:id:digitarhythm:20140830224336p:plain


 


ボタン1〜4に関しては各ゲームパッドによって違いはあるが、ボタンが4つあればボタン1〜4になっていると思われる。


ボタン5と6は、人差し指で押すボタンが返ってくる。
垂直軸と水平軸は−1、0、1の3つの値を返す。


さらに、Xbox360コントローラーでは2つのアナログスティックの値を−1〜1の範囲で返すようにしている。


しかし、アナログスティック1の値は垂直軸、水平軸の値とリンクしているので、アナログスティック1の値が振り切る(1、もしくは-1になる)と、十字キーを押したのと同じ状態になる。


Xbox360ではボタンは16個あるのだが、ファミコンもどきコントローラーとXbox360コントローラーで同じような値を返すのがボタン1〜6までなので、このライブラリではボタン6までしか値を返さない。


Xbox360コントローラーでは十字キーの値はボタンとして返ってくるのだが、ライブラリのほうで水平軸、垂直軸の値として返るように違いを吸収している。


 


ライブラリはgithubにあるので、普通にクローンすると使えるようになる。


 


digitarhythm/gamepadprocedure · GitHub


 


ファイル自体はCoffeeScriptなので使用する時はコンパイルしてご使用ください。


 


コンパイルしたファイル「gamepadprocedure.js」を読み込むと、「gamepadProcedure()」という関数が使用出来るようになるので、ゲームなどのループ処理内でこれを呼ぶことでゲームパッドの状態が配列として返ってくる。


SafariIEの場合は空の配列が返される。


 


GAMEPADINFO = gamepadProcedure()


 


上記のようにした場合、ゲームパッドがひとつの場合はGAMEPADINFO[0]ゲームパッド情報が格納されている(ゲームパッド番号=0)。



  • GAMEPADINFO[0].padbuttons

  • GAMEPADINFO[0].padaxes

  • GAMEPADINFO[0].analogstick


上記3つのオブジェクトはさらに配列になっていて、GAMEPADINFO[0].padbuttons[0]〜[5]にボタン情報が入っている。


GAMEPADINFO[0].padaxes[0]には、十字キーの水平軸情報が入っている(-1、0、1)。


GAMEPADINFO[0].padaxes[1]には、十字キーの垂直軸情報が入っている(-1、0、1)。


GAMEPADINFO[0].analogstick[0]には、アナログスティック1の情報が配列として入っている。


GAMEPADINFO[0].analogstick[0][0]には、アナログスティック1の水平軸情報が入っている(-1〜1)。


GAMEPADINFO[0].analogstick[0][1]には、アナログスティック1の垂直軸情報が入っている(-1〜1)。


GAMEPADINFO[0].analogstick[1]には、アナログスティック2の情報が配列として入っている。


GAMEPADINFO[0].analogstick[1][0]には、アナログスティック2の水平軸情報が入っている(-1〜1)。


GAMEPADINFO[0].analogstick[1][1]には、アナログスティック2の垂直軸情報が入っている(-1〜1)。


 


ChromeFirefoxではコントローラーの認識されるタイミングが違う。


FirefoxではファミコンもどきコントローラーでもXbox360コントローラーでも、Webアプリを起動した時には認識しておらず、ゲームパッドをなにかしら操作した時に認識される。


しかし、ChromeはどちらのゲームパッドでもWeb起動時に認識している。


動作的にはChromeのほうが好ましいのだが、一回認識してしまうとその後にUSBコネクタを何回抜き差ししても、最初に認識したゲームパッド番号がリセットされない。


例えば、Xbox360コントローラーを挿した状態でWebアプリを実行するとXbox360コントローラーがゲームパッド番号0として認識される。


その後にXbox360コントローラーを抜いてからファミコンもどきコントローラーを挿しても、ファミコンもどきコントローラーはゲームパッド番号1となりChromeを再起動するまでこの情報はリセットされない。


どちらにせよ、今の状態では複数ゲームパッドを使用したり、ゲームパッドの抜き差しなどはオススメしない。


2014年8月9日土曜日

enforce(enchant game framework)でシューティングゲーム

以前、Scratchで「Return to the earth」というゲームを作ったことがある。


Scratch2.0の新機能を確認するために作ったゲームなんだが、最初に作ろうと思った面を最後まで作りきれなかった。


そこで、enchant.jsを使ったゲームフレームワーク「enforce」でこれをちゃんと作ってみようと思う。


そして、Chromeアプリストアに有料で出してウハウハしよう(なんつって)。


とりあえずひな形を作ってみた。


カーソルキーの左右でシリンダーが移動して、「z」キーで弾を発射。以上(笑)


 ChromeSafari、ハイエンドのAndroid端末のChrome、iOS8.0以上のSafariで動くと思います。


スマホなどのタッチデバイスでは自機(シリンダー)を動かして弾を撃つことは出来ませんが :-P


QMK開発環境構築メモ

## Ubuntuコンテナイメージ取得 ```bash docker pull ubuntu:24.04 ``` --- ## コンテナ作成 ```bash docker run -it --name qmk_dev -v [マウント元ディレクトリ]:[マウント先ディレクトリ]...