2014/09/29

JavaScriptの比較演算子について

JavaScriptの比較演算子は2種類ある。
「==」「!=」と「===」「!==」。
「==」「!=」では数値とオブジェクトの比較ができる、というかオブジェクトを数値として比較することが出来る、とかなんとか。
つまり「1 == '1'」はtrueとなる。
またtrueとfalseはそれぞれ「1」と「0」になるようだ。
つまり「1 == true」はtrueとなる。
当然だが「true == 'true'」はfalseとなった。
まぁこんなことは別に覚えなくても問題無い。

何故なら、
比較演算は全部「===」「!==」で書け!ということだから。
JavaやCの比較演算子に相当するのでその辺の言語を書いてた人はJavaScriptの比較演算子は全部「===」「!==」と覚えた方が良い。

数値の1と文字列の"1"が等しいなんてほとんどのプログラマは混乱するはず。
どのみち数値の1と文字列の"1"を比較する場面なんて滅多に無いし、ましてその比較結果としてtrueが欲しい状況なんて99%無いから。
そしてそんな特殊な状況ならしっかりと型変換をしてから「===」で比較しないと難解なコードになるに決まってるから。
大事なことなのでもう一度言うとJavaScriptでは比較演算は全部「===」「!==」で書け。

2014/09/28

L-01eでU-mobile

docomoのL-01eという機種でU-mobileの通話プラス 3GBというプランを使い始めて一カ月ほど経った。だいぶ慣れてきた、というかスマホ側を弄繰り回して良い感じになってきた。

正直世間の人はスマホを何に使ってるのか分からないんだが、個人的に重要なものを挙げると、電話とEメール、最近Lineでやり取りすることがあるのでLine、暇潰し用のWebブラウザ等、音楽プレーヤー、初めての場所に行く時のGoogleマップとGPS、電車の乗換案内、忘れちゃならない目覚まし時計、カメラ、ビデオとか。
うーんあとは、、って感じかな。facebook、twitterはめったに見ないし、PCからブラウザで見れば十分。
ソーシャルって意味ではこのブログのアカウントでGoogle+があるので一応Google+アプリは入れている。居酒屋で飲みながら「居酒屋、バーが好き」コミュニティに投稿しようかと思ってはいるのだが、飲んでるときはスマホの存在を忘れてしまうので結局使ってない。

まぁつまりそんなに使い込まないだろうということ。だからこそ安いU-mobileにしたんだ。
ちなみにU-mobileは通話が1分間で40円だが、9月30日から専用の通話アプリを使うことで1分間で20円に下がるらしい。どんなもんかな。

さて。
乗り換えて月額がかなり下がったにも関わらず全く問題無いという部分と、ちょっと使いにくくなった部分があるので書き起こす。

■通話
無料通話が無いってことは全く問題無い。しかし留守番電話サービスは外してしまったのだがこれはどうだろう。U-mobileでも留守電サービスは月300円で使えるが、考えた末にケチることにした。後で契約変えるかも?

■Eメール
メールがGmailになってしまってPCメールを受信しない設定の人に届かなくなってしまった。これは実は全くの予想外。ただアドレスが変わるだけだと思ってたのに。てかその設定じゃ不便だろう・・と思う。今更だがauの迷惑メールフィルタは優秀だった。だから迷惑メールフィルタ設定すれば良いだけのはずなんだがなぁ。
ちょっと参った。
あとGメールはたまに遅延するかも?これは半月くらいじゃ分かんないなぁ。

■データ通信
結局半月で500Mbyteも使わないという事実…。3GByteは無駄?いや余裕があるのは良いことだって・・。
速度は150Mbpsとか絶対出てない。ま、あまり速くはないが使い物にならないほどではない。時間帯とか他の要因があるのでこれはまだ分からないが今のところ特に困ってない。
2chが遅い。遅いと言っても何十秒か、というくらいだが。
見るだけなら別鯖を経由してアクセスすれば済むのでスマホ用の2chリーダサイトをGAE上に作ってやった(http://b2devel.appspot.com/mobile.html)。MobileサイトのHMTLとJQuery Mobileの勉強に多少はなったかな・・?
最近普通に2chが見れるようになってしまって作ったサイトは使わなくなってしまった・・。 Lineは全然問題無い。

■目覚まし時計
平日のみ、という設定が出来なく、月から金まで鳴らしているが祝日も鳴ってしまう。これは単にL-01eに日本の祝日がプログラムされてないだけだと思うが、IS03の方が賢かった。
まぁ良いけど・・ なんかそのために別のアプリ入れるのもアレだし。

■音楽プレーヤ
全く問題無し。当然IS03より動作がキビキビしてるので良いぞ。

■Googleマップ、GPS
前も書いたがこれが一番厄介だと思った。これがあると知らない土地に行く時に安心できるから。
docomoのGPSサポートが使えないのでそのままではポンコツGPSだ。
一応AngryGPSというのを入れてdocomoでなくgoogleのサポートサーバ(?)につなげるようにしてみた。よく分かって無いがとりあえずデフォルトの接続先がdocomoのままなのが良くないらしい。
だがその設定ファイルはdocomo製品として組込まれており、書き変えるにはrootを取るしかない。
しかしファイルを書き変えないでもAngryGPSでOSの設定を上書きすることが出来るらしい。というわけでやってみたのだがどうも満足できないので、あきらめる前にrootを取って設定ファイルを書き変えることにした。

幸いL-01eは簡単にrootを取れるツールが2chに公開されていたのですぐroot化出来た。
チマチマと操作しながら「/system/etc/gps.conf」を書き換える。
その結果、IS03よりは精度や速度が悪いものの、GPS statusというアプリを起動してちょっと待てば現在地が取得できるようになった(最近またGPSがポンコツになってしまった、直さないと・・)。

/system/etcの中のconfファイルを編集するというのは、ほんとにLinuxの設定変更のようだ。
感覚的には「docomoのスマホ」という完成品としては当然変更されてはいけない設定だし、スマホというハードウェアにAndoroidOSが乗っかってるだけのモバイルPCだ、と考える人は当然編集できるもんだ、という、両方の意見が分かる気がする。
まぁちょっと怪しい手順を踏んでroot権が取れるという今の状況は良いのかも。MVNO的にはrootが取れる端末の方が良いと思う。

root化には興味が無かったのだが、せっかくrootを取ったのでdocomoの契約が無いと使えないプリインストールアプリはザクザク削っていくことにした。最終的に電話と電話帳、アップデートサービス以外ほとんど消えたと思う。あとLGの韓流ドラマ専用チャンネルのアプリとか韓国語キーボードとかも削除w
その他Google系のプリインストールアプリも必要になったら入れ直せばいいので思い切って削除。

これらをやった心理的な効果が思った以上にあって嬉しくなり(「docomoのスマホ」から「自分のスマホ」になったような気分)、ホーム画面やアイコンのカスタマイズなんかもつい時間かけてやってしまった。

まぁ結局使うのはいつものアプリだけなんだけども・・

2014/09/22

Cosmetics

数日前から唇が乾いてひび割れて痛かった。大した痛みではないんだが、うっかり口を大きく開けてビシッ、何か言いかけてバシッっと、治りかけては割れ、治りかけては割れしていて嫌になってた。
そこでメンタームスティックを買った。まぁ多少はマシになるかなと思ったが意外なほど効果があってすっかり治ってしまった。
しかし普段リップクリームを付ける習慣は無いのできっと治った後は使わなくなる。
そしてどっかいってしまい、また割れた時には新しく買わねばならないだろう。
「ウィスキー無いなー」と聞こえたら「W9」のこと。 航空無線では聞き間違えを起こさないように「W」を「ウィスキー」、「9」を「ナイナー」と発音するらしい。

Haphostを日本で使う場合

個人的な趣味でHaphost(旧Host1Free)のVPSを使っている。(現在はサービス終了・・)
また最近長距離間のリモートホストとのやりとりについて調査していたので何となく分かったことを書く。

Haphostのサーバーはリヒテンシュタインにあり、日本からのRTTが260ms程度ある。
RTTが260msもあると何が困るかというと、全てのレスポンスが0.2~0.3秒ほど遅くなる。
TeraTermを使っていると、キーを一回押してそのキーがコンソールに表示されるまで0.2秒かかるということ。
キーの反応が遅いのでスペックかと思いそうだが、マシンスペックや帯域とは関係なく単に信号の送受信に時間がかかるというだけ。
すると露骨にタイピングがしにくくなるし、特に"ls"など0.1秒くらいで打てるコマンドに安心してエンターが押せなくなる。慣れるとコンソールに表示される前にエンターを送信するようになるが。
アマゾンのEC2でも試したが、アメリカなら100ms~200ms、ヨーロッパなら200ms、そして最大のRTTがブラジルのサンパウロ、390msだった。地球の裏側だからね。
EC2のXLargeのマシンでもRTTが多いとコマンドタイプのレスポンスはもっさりする。これはもうどうしようもないのでこういうもんだと思うしかない。

もう一つはファイル転送が回線帯域ではなくRTTによって頭打ちになること。
Haphostは帯域幅10Mbpsと書いてある(まぁそんな速度が出るとは思わないが)。
転送速度の頭打ちはTCPのファイル転送の仕組みによる。ファイルを送信する場合、ある程度のデータ量に区切って送る。
データを送信 → 受信側が受信後に確認応答を送信 → それを受け取ったら続きのデータを送信、でファイル終わりまでどんどん送る。(確認応答が無ければ再送するなどする)
この仕組み自体に問題は無いんだけど区切る量がTCPウィンドウサイズと言って64kbという少量なのが問題。
回線速度的に64kbを送るのが一瞬だとしてもその確認応答を受け取るまでにRTTの0.2秒かかる。
つまり0.2秒に64kbずつしか送れない。毎秒320kbしか転送出来ないのはちょと遅いと感じる。
前回触れたUDPを使った高速転送はこの場合に有効で、UDPは確認応答を待たずにどんどんデータを送るので回線速度一杯の速度が出る(当然パケットロスト時の処理は独自に行う必要がある)。OSSなら「Tsunami UDP Protocol」、製品ならSKEED社の「Silver Bullet」や富士通の「BI.DAN-GUN」など、探せばいくつかあるだろう。

まぁそんなの用意するのは面倒なのでHaphostの場合、HTTPサーバを立てて分割ダウンロードソフトで複数コネクションを張れば十分な速度でダウンロードできる。5分割もすれば回線速度一杯の速度になるはず。アップロードもFTPで分割アップロード出来そうな感じだが、よく分かんないので仕方なくSCPでのんびり転送している。

そもそもTCPウィンドウサイズが64kbというのは拡張されているはずなのに、実測したりUDPを使った転送と速度比較をするとどう考えてもウィンドウサイズ64kbで転送されている。
本当はUDPの転送ソリューションなんて使わずにウィンドウサイズを増やすだけで十分な速度になるはずなのにどうもそうなってない。この辺詳しい人に聞いてみたいなぁ。

ちなみにHaphostではsysctlの設定は変えられないようだ。このVPSはOpen-VZで構築されており、カーネルは共有しているらしいからその制限のようだ。

bashコンソールに色が無い

環境によるのか分からないがTeraTermでのコンソールで色が付いていなかった(ls -laしたときなどのディレクトリや実行ファイルに色が付く機能)。
/etc/profileに以下を追記
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'

日本語が文字化け

OSの文字コードはUTF-8のはずなのだがVimで日本語は文字化けしていた。 以下のコマンドを実行。
update-locale LANG=ja_JP.UTF-8
こうするとメッセージなども日本語になる。

2014/09/11

UDP通信って暗号化できるの?

── FTPに対してSFTPとかSCPがあんじゃん。UDPってそういう暗号化通信するプロトコルってあんの?
などと言ってるのを聞いてしまいました。
この質問もレイヤーを無視したいい加減な質問だが、それはそれとして
もしこう聞かれちゃったらやっぱり答えに詰まるでしょう。

FTPとかHTTPとかはアプリケーション層のプロトコル。
暗号化プロトコルのTLS(SSLのこと)もアプリケーション層だが、順序としてはFTPとかHTTPの下位プロトコルになる。
つまり IP→TCP→SSL→FTP or HTTP という積み上がり。

アプリケーション層は送られたデータの内容をどう扱うかの取り決め。
なのでブラウザで表示するとかもあるが、暗号化するとか、復号化するとかの取り決めも当然ある。
そんなわけでTCP/IPの通信(HTTP,FTPなど)の多くにSSL版(HTTPS,SFTPなど)がある。
FTPに対してSFTPとかがあんじゃん、というのはここから来ている。

対してUDPはトランスポート層のプロトコル。
トランスポート層のTCP、UDPはどんな感じで送るのか、の取り決めなので運んでいるデータに関しては無関心だ。
暗号化はその上位層でやってくれ、ということ。
「(上位層の)SSLは通信内容を暗号化するプロトコルなんだからUDP通信もそれ使ってTCPと同じように暗号化すれば良いじゃない」、と思うがSSLはTCPの上位プロトコルであってUDPの上位には無い。
サボってるんではなく、SSLは最初に鍵交換が必要だったり、整列された完全なデータでないと解読できないなどの理由から、UDP通信をSSLで暗号化することは出来ない。
例えば同じデータをTCPとUDPで送ると、TCPではデータが完全に届くがUDPでは途中が抜けたり順番が入れ替わったりする。UDPはIP電話とかビデオチャットとか、正確に全部届くことよりリアルタイム性を重視する通信に使うのでそれで良いんだが、もしUDPで暗号文を送信して、受信側で文字が入れ替わってたりするともう復号できなくなるのは当然だ。

こういうUDPの使われ方だけを見ると「UDPってそういう暗号化通信するプロトコルってあるの?」というのは変な質問だが、実はUDPを使ってファイルの転送など完全性が必要な通信を行うソリューションがいくつかあるからだ。
UDPで通信し、データの順や抜けを独自にコントロールすることでTCPより速くなる場合がある。この場合暗号化も独自に行うことになるので「そういう暗号化通信」が出来るかどうかはソリューションによるとしか言えない。

またそれとは別に、DTLSというUDPを暗号化するプロトコルもちゃんとある。
IP電話等の傍受防止のためにDTLSは使われる。どういう風に暗号化、復号化してるのかはよく分かんないけど(ネスペ対策のためだけに勉強するにはマニアック過ぎるし)。

一方ネットワーク層のIPにはIPsecというIPの補助的なプロトコルがあって、上位層を全部、あるいはトンネルモードならIPも含めて全部暗号化することが出来る(IPsecはIPv4では補助的なプロトコルだがIPv6では必須になった)。
IPは「どこからどこまで送る」、の取り決めだが、要はIPだけでデータを届けることまでは出来るのでこの上位層(TCPだろうがUDPだろうが)をまるごと暗号化しても届けることが出来るということ。
これは低層での処理なのでイメージがかなり異なる。
送信アプリケーションは暗号化など意識しないで送信して、IPsec対応装置(ソフトウェアでも良いが)が勝手に暗号化し、受信時もIPsec装置が勝手に解読して受信アプリケーションは暗号化されてないパケットを受け取る、という感じ。
つまりVPNみたいな利用方法だ。
「UDP通信を暗号化する」というお手軽なイメージとは異なるが一応UDP通信が暗号化されていると言える。

で質問にだけ答えると
── HTTPSとかSFTPとかってTLS(SSL)を使ってるんす。
   でもTLSってTCPの通信じゃないと使えないんすよ。
   UDP版のTLSっていう位置付けでDTLSってのが一応あるっすよ。
   UDP通信で暗号化が必要なアプリならきっとDTLSで通信するモードがあるはずっす。
   あとIPsecを使ったVPNみたいな通信ならTCPもUDPも自動的に暗号化されるんすが
   まぁ対応機器が必要だったり送受信の両者で設定が必要だったりで大袈裟っすね。
なんでこういう口調なんだろうか。

2014/09/04

U-mobileをメイン運用してみる

携帯電話の話。長文の上駄文。

auからの脱出

家族で携帯を使い始めて以来、ずーっとauだったんだけど、2年縛りの解除月が8月だったので脱出した。この2年縛りの仕組みは本当に良くないと思う。
ちなみに使ってたのは「未来に行くならAndroid」などとレディガガの曲に乗せて宣伝されていたIS03だ。割と早めに入手したはずなのに当初からちょっと時代遅れ?と感じていた。他社ではもっと良い機種がポンポン出てたし。
最近はIS03を出すと「え、それスマホですか?」などと化石を見るような目で見られるようになった。最初から最後まで未来を感じたことは一度も無かったが、通話機能付きモバイルネット端末と思えばこのスマホ自体に不満は無かった。ただ不満だったのは古い機種で慎ましく使っているだけなのに一人前の料金が毎月掛かっていたことだ。別にauで嫌な目にあったわけでは無い。

通信社の選定

で移行先はEMOBILEかなーと思ってたのだが祖父が契約していたEMOBILEの解約時の交渉でかなり印象を悪くしたので他も含めて探すことにした。そもそものきっかけは友人が「EM良いっすよー実質3千円で携帯維持できますから」と言ってたことなんだけど。
そのEMが8月からY!mobileになり、1ヶ月1G制限で2980円などと強気な価格改正をしたので完全に候補から外れる(MNPでNexus 5がタダってのは魅力だったんだけど)。

でMVNOの音声通話付きプランにMNPすることに。
候補が沢山あるMVNOだが、音声通話付きに絞ると一気に選択肢が狭まる。
今までは通信量制限無しだったのでいきなり1ヶ月1G制限になると厳しいと予想。1週間で256M?余裕で超えちゃうんじゃないの?みたいな。
そこで安い順、通信量3Gくらいで見てみるとU-NEXTのU-mobileが1ヶ月3G、1980円(税抜!)というのが目立っていたのでこれに決める(決して千年の天使に惹かれたわけではない)。後で気付いたが税抜ってのは卑怯だ。まぁこれは近所のスーパーにも言いたいことだが。
1ヶ月3Gなら、1週間で768M?まぁこんなもんじゃないの?と。あと他社では3日間で366M使うと規制が掛かるなど書いてあるがそれも無いようだし。
(U-mobileに3日間366Mの制限が有るのか無いのかネットの情報でははっきりしないが、30日間で3072M使える契約なのに3日間で366M使うとペナルティってのは変なので、有るとしても少し緩いはずだ)

端末の選定

EMがダメなので機種を考える必要がある。これが実は面倒で、EMなら無料でNexus 5だから楽なんだけど。U-mobileならHuaweiのAscend 6Gという薄型軽量高性能スマホか、freetelという日本の会社のやや安めのSimフリースマホが提携してるようなのでどっちかにしようと思った。しかしどちらも特に値引きはしていない模様。Ascend 6Gは実機も見てすごく良さそうだったのだが格安Simを刺すには高すぎる気がしてfreetelのNicoという機種にしようと思った。しかし発売が9月でまだ発売していなかった。

でU-mobileのようにDocomoの回線を使ったMVNOならDocomoのXi対応中古スマホで使えるということでそっちを探してみることにした。しかし中古といっても比較的新しくて良いものは高く、安いものには安いなりの理由があるという感じ。予算はfreetelのNicoと同じくらいとして2万円以下で探した。
結局じゃんぱらで「L-01e」というLG電子のスマホにした。
2年前の機種らしいがAndroid4.1、Xi対応なので表向きは十分かなと。中古相場が2万弱のところ、傷、欠け有りで1.5万円という格安価格だったので深く考えずに買ってしまった。格安Simに格安中古スマホ。と言っても当時のフラッグシップ機らしくかなりなハイスペックなので良い選択をしたような気がする。

実行の後

ちょっと疑問だったのはauスマホ時代は通勤の行き返りにYoutubeの1hour liquid DrumnBass Mixだのをかけていたので月3Gの制限でこれが出来るのかなと。
10分くらいYoutubeをBGMにして計測してみると結果は全然無理そうだ。BGM動画で画面は静止画なので少なくすむかと思ったが、だいたい1分で3MbyteくらいDLしている。まぁ通勤中ずっと流すのは無理でも30分くらい聞いて90M、だから何とかなるのかもしれない。
まぁ安さと引換えに・・ってことで。
あと正直参ったのはGPS精度の悪さ。MVNOになってauのアシストGPSが使えなくなったのが効いてるのか、IS03のGPSが優秀だったのか、LGのGPSがへぼなのか、まぁいろんな理由からだと思うがL-01eで現在地を表示すると平気で1kmくらいずれてたりする。

いろいろ情報を集めてAngryGPSというのを入れてみた。GPS精度が改善するというがどうだろうか。

YoutubeのBGM動画だけなら意外と月3Gの制限の中で使えそうだと分かった。
ただそれに加えてYoutubeの普通の動画とかを見るとさすがにキツイのかどうか。

通信速度は特に不満は無い。

しかし2chをよく見ていたのだが、2chだけレスポンスが遅い。待てば見れるので遮断されてるのではない。
これはDTI系のMVNO全般の問題らしい。どうせ読むだけなので2chブラウザにプロキシを使うよう設定すれば解決するのだが、オープンに使えるキャッシュ重視のプロキシって、なもん無いか。
最近2chも全く問題無く表示されるようになった。すばらしい。通信速度も改善されているようだ。 (常用して1ヶ月ほど経ったので続きを書きました