YAMWiMAXの長期継続特典(U-NEXTの無料試用)は電話で解約

平日の11:20にフリーダイヤル番号(0120-313-220)から電話が掛かってきたので「セールス電話だろうな」と思いつつ出てみると、「YAMADA Air Mobile WiMAXの長期継続利用特典でU-NEXTの1ヶ月無料試用が可能です」という内容でした。U-NEXTとは、簡単に言うと会員制の動画配信サービスです。国内において、同様なサービスと比較して、配信数は最大級だということです。

使ってみた感想

モノは試しと、電話越しに簡単な応答をすることで契約を交わしました。(合計5分半ほどの通話時間)見てみると、確かに配信数そのものは多かったのですが、現在地上波で放送中の比較的鮮度が高いコンテンツについては殆どがPPV(ペイ・パー・ビュー:会員費とは別に1視聴に対して課金が必要)でした。200円/話くらいでしょうか。BD/DVDと比較すれば当然安いですが、割高感はありますね。それに、画質も良くありませんでした。

ただし、鮮度の低いコンテンツについては殆ど会員費の範囲内であり、PPVではない印象です。例えば、2期を地上波で見て気になっていた蟲師1期はPPV対象外だったので見れました。そういう使い方をする人には向いているように思います。一方、住んでいるところが田舎で、深夜アニメが殆ど放送されないからネットで、という人には向かないでしょう。

解約で手間取る

ある程度試してみたところで忘れないうちに解約しようとしたのですが、なかなか解約メニューが見つからないという小賢しい手段を使ってきます。某SNSで、Q&Aの「退会するには?」からしかリンクが貼られていないという過去例もあったので色々調べてみても見つからない。というか、退会メニューが有るはずの場所に存在しない。(Q&Aのスクリーンショットではあるべきところにない。)そのため、ウェブでの退会は諦め、電話で申込することにしました。

向こうから掛かってきた電話番号(0120-313-220)に電話すると「このフリーダイヤル番号は11:00〜のみ受付ております」とのこと。んなアホな……と思いつつ調べてみると、YAMWiMAXのウェブページに書かれていた電話番号(0120-810-666)を見つけました。こちらは10:00〜対応しているようです。YAから始まる会員番号と、WiMAXの長期継続特典で案内されたU-NEXTを解約したい旨を伝えると、本人確認(姓名と生年月日)をされ、無事2分ほどで解約出来ました。

ポケモンXYで効率良く3鳥(サンダー、フリーザー、ファイヤー)を捕まえる方法

ポケモンXYで殿堂入り後にフィールドを逃げまわるサンダー、フリーザー、ファイヤーを効率良く捕まえる方法と、実際やってみての気付きをメモしておきます。

調べてみても、実際にやってみた系ではなく、情報をまとめてる系ばかりで、個人的に信用ならなかったので……。

やり方

  1. 殿堂入りします。
  2. 草むらを適当に徘徊して偶然遭遇することを祈ります。(ここは完全に運の領域なので今回は取り上げません。)
  3. 偶然1度でも遭遇するとポケモン図鑑から生息地を確認できるようになります。
  4. コボクタウンにそらをとぶします。
  5. レベル50〜レベル69のポケモンを先頭に、ゴールドスプレーを大量に用意してから使用します。
  6. ポケモン図鑑で生息地を確認します。
  7. 5番道路、7番道路が赤くなっていた場合のみ、5番道路または7番道路まで追いかけて草むらをグルグルします。3,4周グルグルしても出現しない場合は、ポケモン図鑑で生息地を確認して、他へ行っちゃってる場合はコボクタウンにそらをとぶで戻ります。
  8. 戦闘開始直後に3鳥がすぐ逃げるので、そらをとぶでコボクタウンに戻ります。後は、ポケモン図鑑で確認するところからやり直して、これを10回続ければ「海神の穴」に固定シンボルとして出現するようになります。

気づいたこと

  • 前作とは違い「マップ移動では生息地が移動しないことが多い」ということに注意が必要です。
  • 前作と同じなのは「そらをとぶではランダムに生息地が移動する」ということです。
  • 5番道路、7番道路のみ追跡して、深追いしないことが重要だと思いました。
  • 集中してやれば1時間程度で10回遭遇できると思います。片手間だと1時間30分くらいかな。

クラッシュ・オブ・クランでクラン加入申請を拒否された後のクールタイムは24時間

あまり正確な記述が見当たらなかったので実験しつつ試してみました。

クラッシュ・オブ・クランの許可制クランに申請を出して拒否された場合、また同じクランに対して申請を出しても「このクランとの接触を禁止されています。」というエラーメッセージが出力されます。実際に試してみたところ、24時間後にエラーが解消されて、無事申請することが出来ました。

PHPの配列で色々と実験してみました

久しぶりにPHPを触ってみると、配列の扱いで「どうだっけ?」となった箇所が幾つかあったので、色々と実験をしてみました。メモしておきます。

foreachでループカウンタ(っぽいもの)が欲しいとき

foreachがある言語では、宗教的な理由により可能な限りforeachを使いたいものです。ところが、ループカウンタの出力が要件としてある場合はforを使うしか無い、ように見えますが、foreachでいけます。(ただし、後で触れますが落とし穴があります。)

<pre><?php

$as = array(
    "data0"
  , "data1"
  , "data2"
  , "data3"
  , "data0"
 );

foreach($as as $key => $a) {
  echo "id:" . $key . " value:" . $a . "\n";
}

// これでいけるし当然か……
echo $as[0] . "\n";
echo $as[1] . "\n";
echo $as[2] . "\n";
echo $as[3] . "\n";
echo $as[4] . "\n";
id:0 value:data0
id:1 value:data1
id:2 value:data2
id:3 value:data3
id:4 value:data0
data0
data1
data2
data3
data0

unsetで要素を削除するとキーごと削除される

配列から要素を削除する場合はunsetを使用します。すると、キーごと削除されてしまうようなのです。上記foreachを使用する場合は気をつけておかなければ足元を掬われそうです。

forのcount($as)で3が取得されるため、id:2までしかループしないうえ、UndefinedのNoticeが出てしまいます。

<pre><?php

$as = array(
    "data0"
  , "data1"
  , "data2"
  , "data3"
  , "data0"
 );

$delkeys = array(0, 2);

foreach($delkeys as $delkey) {
  unset($as[$delkey]);
}

var_dump($as);

for($i = 0; $i < count($as); $i++) {
  echo $i . " : " . $as[$i] . "\n";
}
array(3) {
  [1]=>
  string(5) "data1"
  [3]=>
  string(5) "data3"
  [4]=>
  string(5) "data0"
}


Notice:  Undefined offset: 0 in D:\xampp\htdocs\sample\unset_sample.php on line 20

0 : 
1 : data1


Notice:  Undefined offset: 2 in D:\xampp\htdocs\sample\unset_sample.php on line 20

2 : 

キーを削除しない(イメージとしては、削除された要素分、キーを詰めて再設定?)ようにするためには下記の方法を使えば良いようです。

<pre><?php

$as = array(
    "data0"
  , "data1"
  , "data2"
  , "data3"
  , "data0"
 );

array_splice($as, 1, 1);

var_dump($as);
array(4) {
  [0]=>
  string(5) "data0"
  [1]=>
  string(5) "data2"
  [2]=>
  string(5) "data3"
  [3]=>
  string(5) "data0"
}

今回はあくまで実験だったため以上の書き方としましたが、キーに意味がある要件の場合は、そもそもデータ構造を見なおしたほうが良さそうです。

Windows8.1でVMWarePlayer6.0でOWASPでBurbSuiteで……

思った以上にハマったのでメモしておきます。備忘録レベルです。

はじまりは、Webセキュリティを攻撃者の立場から勉強しようと思い、脆弱性の残されたWebアプリケーション(Webサーバ)をローカルでたてて実験しようと考えたことからでした。調べてみると、OWASP Broken Web Applicationsという、脆弱性の残されたWebサーバとWebアプリがVM仮想イメージで配布されていることを知りました。Windows8.1のホストOSから、VMWarePlayer6.0を使ってゲストOSとして呼び出す手順が妥当と判断しました。また、脆弱性診断のためローカルプロキシツールであるBurbSuite(FreeEdition)を使用することとしました。

各種ダウンロード/インストール

VMwareWorkstation10はインストーラに内包されるネットワーク設定ツールを抽出するために必要のため、インストールする必要はありません。今回はなくてもいいですが、VMwareのネットワークをツールを使ってわかりやすく学びたければ、少し重いですがダウンロードしておきましょう。

VMwarePlayer6.0
普通にインストールしてください。
VMwareWorkstation10 評価版
別項で説明。
Java Runtime Environment
私のPCにはJavaがインストールされていませんでした……。インストール後はPATHを通しておいてください。
BurbSuite FreeEdition
jarをどこかに配置してください。
OWASP Broken Web Applications
どこかに配置します。(C:\vm)

VMwareWorkstation10の使い方(なくてもいい)

PlayerシリーズにはVMwareのネットワーク設定ツールが含まれていないため、必要の場合は、Workstaionのインストーラに含まれるツールを抽出してやります。コマンドラインで同じフォルダに移動して、下記コマンドを実行します。

./VMware-workstation-full-10.0.1-1379776.exe -e work

後は、workフォルダにあるcore.cabを解凍して、下記ファイルを「C:\Program Files (x86)\VMware\VMware Player」に移動します。もうWorkstationは用済みのため削除していただいて構いません。

  1. vmnetcfg.exe
  2. _vmnetcfglib.dll→vmnetcfglib.dllにリネーム

VMwareのネットワークを設定

「コントロールパネル>ネットワークの状態とタスクの表示>アダプターの設定の変更」で下記画面を開くと、VMnet1とVMnet8ができています。

ネットワークアダプターの設定

ネットワークアダプターの設定

VMwareではVMを起動するときにネットワークアダプタの設定をBridge/HostOnly/NATから選択できます。それぞれの違いは下記のとおりです。今回はNATを選びますがHostOnlyでも良いです。セキュリティ脆弱のあるアプリをあげるので、念のためBridgeはやらないほうが無難です。

ネットワークの接続形態を理解するために、ここの図が非常にわかりやすかったです。

設定 使用する仮想アダプタ 用途
Bridge VMnet0 ゲストOSをホストOSのつながるルータへ接続したい場合。(今回は非推奨。)
HostOnly VMnet1 ゲストOSとホストOSをHUB(L2SW)で接続したい場合。
NAT VMnet8 ゲストOSとホストOSとNATルータ(L3SW)で接続したい場合。
仮想マシン設定の編集

仮想マシン設定の編集

NAT接続にした前提で話を進めます。ゲストOSからインターネットに接続するためには設定が必要となります。(まあ、やらなくてもいいですが。)設定のイメージについてはここの図が非常にわかりやすかったです。ちなみに、VMnet8をvmnetcfg.exeで見てみると下記の通り。DHCPサーバ機能も兼ねているので、DHCPの設定を見てみると.128からIPアドレスが配布されるように初期設定されていました。

仮想ネットワークエディタ

仮想ネットワークエディタ

DHCP設定

DHCP設定

Windows8.1側では、インターネット接続をしているアダプタの設定画面を開いて、インターネット接続をVMnet8と共有します。(こういう設定をICSと呼ぶらしいです。)

インターネット接続の共有

インターネット接続の共有

あとは、VMnet8アダプタのIPアドレス設定を確認します。(ゲストOSのeth0にVMnet8(DHCP)から配布されるIPアドレス/ネットマスクに従ったIPアドレスが設定されていれば問題ありません。)このあたりのイメージは先程も紹介したこちらの記事にある画像がわかりやすいですのでぜひ参照してください。ちなみに、DHCPでIPアドレスは.128から配布される設定となっているので.1固定にしておけばゲストOSとIPアドレスが被りません。

VMnet8のIPアドレスを確認

VMnet8のIPアドレスを確認

後は、VMwarePlayerでOWASP仮想イメージを実行するだけです。root/owaspbwaでログインできると思います。Windows8.1側とLinux側で相互にpingが通り、Linuxからgoogle.com(インターネット)にpingが通り、ホストOSのブラウザから「http://192.168.137.129/」(IPアドレスはifconfigで確認)につながれば設定完了です。長い道のりでした。

BurbSuiteの設定

BurbSuiteの配置されたフォルダにコマンドラインで移動して、下記コマンドを実行します。パス等の関係なのか、バッチファイルではうまく行きませんでした。動かない場合は、きちんとコマンドラインでフォルダに移動してから実行してみてください。

java -jar burpsuite_free_v1.5.jar

Proxy>OptionsよりIP:Portを確認します。ループバックアドレスである「127.0.0.1:8080」で待ち受けていることを確認できました。(わざわざ確認するまでもないですが。)つまり、試験するブラウザにプロキシを設定します。

ループバックアドレスの確認

ループバックアドレスの確認

ブラウザへのプロキシ設定

試験対象のページ以外へのアクセスはループさせたくありません。そういう、プロキシ適用有無のルールを記述する方法があります。下記ファイルをどこかに配置してください。

function FindProxyForURL(url, host)
{
	if(isInNet(host, "192.168.137.0", "255.255.255.0")){
		return "PROXY 127.0.0.1:8080";
	}
	else return "DIRECT";
}

Firefoxの場合は下記のように設定します。バックスラッシュとスラッシュ問題もあるようなのでいろいろ試してみてください。

プロキシの設定

プロキシの設定

最終確認

試験ページ(http://192.168.137.129/)にアクセスした時はBurbSuiteがリクエストを捉えてくれて、それ以外のページにアクセスした時は素通りしてくれるようになることを確認して全ての工程が完了です。自分、お疲れ様でした。

おまけ

できない! つながらない! というときはWindows側アダプタの停止→開始や、Linux側アダプタのdown→upを試してください。

ifconfig eth0 down
ifconfig eth0 up

参考URL

非常に多くのサイトを参考にしました。感謝。

WindowsのLINEアプリで既読となるタイミング

まわりでかなりの割合が使っていたため、時代の波に取り残されまいと始めたLINEですが、目の前にPCという最高の入力デバイスがあるにも関わらずスマホでペチペチ入力するのは面倒臭い。そのため、デスクに座っているときはWindowsデスクトップ版のアプリを使っています。

こちらが相手の発言に「既読」を付けるのは、会話ウィンドウをアクティブにしたときだということが友人との検証で明らかとなったのでメモしておきます。逆に言うと、会話通知がありタスクバーでピコピコしているときは既読がついていません。返事を保留しても安心して作業を進められますね。(既読をつけると「返信しなくてはならない」という強迫観念に駆られるチキンにも安心仕様。)

それと、PCでアプリを起動しているときはスマホに通知がいかないようにする設定が非常に便利のためオススメです。「PC版利用時にはスマートフォン側に通知が行かないようにする」にチェックを付けます。

LINE設定画面

LINE設定画面

他にも、「表示名を変更」する機能も便利です。HNやニックネームでLINEに登録している人が非常に多く「誰やねん」となりかねないので登録/整理しておくべきでしょう。Gmailのアドレス帳と2重管理になっているのがストレッサーですがしょうがないです。

ちなみに、PC版ではCtrl+Alt+Rで自分の発言が「既読」になったか表示することができます。

NHK-BSを契約しているのに未視聴の場合は申告すると返金してくれる

先日、NHK-BSの契約をしているにも関わらず1度も見ていなかったので、勿体無いなと思い電話でNHKに申告してみたところ、払いはじめた時期に遡って返金する対応をしてもらえたので状況をメモしておきます。

時系列の状況

例のごとく、今の家に引っ越してくるとNHKの人がすかさず来ました。うちはBSと地デジでコンセント(?)の区別がなく、分配器を噛ませてテレビの地デジ/BS端子に挿せば、両方見れる状態でした。そのため、NHKの人が「分配器さえ用意すれば見れるのでBSも契約しておきましょう」とかいう口車に乗ってBSも契約していました。

それから時は流れて、料金は払い続けてるものの、分配器は買わず見れないままでした。そのため、契約変更しようとNHKに電話(0570-077-077)しました。そうすると、「営業日に担当者から折り返させます」という説明をされ、こちらの電話番号と電話対応できる日時を教えました。(こちらから電話したのも営業日だったのですが、なぜか折り返しという話になりました。)

こちらが指定した日に折り返しの電話がかかってきました。まず、謝られました。そして、払いはじめた時期まで遡って返金する旨の説明を受けました。しばらくすると、NHKから口座に振込がありました。

NHKは傲慢だの盗っ人猛々しいだのネットでは散々言われてますが、話せばわかるのだなあと妙に感心しました。(もともとの評価が最低だと、普通レベルの対応をされても感動してしまう罠。)

「”1年前の今日”に投入されたデータを処理」する仕組みの閏日考慮

閏日を処理する過程で不具合を生み出しかねない実装に思い当たったので、思考整理を兼ねてメモしておきます。

きっかけ

何気なくWikipediaを見ていて下記の記述を見つけ「なるほどなぁ」と思ったことをtwitterに投稿したところ、「システム化するときに頭が痛い」というreplyをいただきました。(仕様と処理が複雑になり、コード等の保守性が下がる。)

2月29日生まれの者の誕生日は閏年に限り到来し、平年に誕生日は存在しない。日本の法律では、誕生日を基準とした行政手続に限り「みなし誕生日」を2月28日としている。

閏年(Wikipedia)−誕生日

その瞬間は「確かに」とだけreplyしようとしたのですが、よく考えてみると、当てはまる事例が他にもあるのではと思いました。

不具合の例

例えば、記事のタイトルにもしている『「”1年前の今日”に投入されたデータを処理」する夜間バッチ』があったとします。この夜間バッチは毎日1:00になるとcronで1度だけキックされます。仕様書通り素直にコーディングすると、下記のSQLが製造されます。

SELECT date_sub(current_date(), INTERVAL 1 year);

更に、バッチの処理対象を取得する処理において、上記SQLは下記のような使われ方をされることでしょう。(createdはデータが投入された日付を表現するとします。)

SELECT * FROM HOGE_DATA WHERE created = date_sub(current_date(), INTERVAL 1 year);

このような実装をした場合、閏日(2/29)に投入されたデータの処理が抜け落ちます

どう整理すべきか

いろいろと解法はあるように思いますが、私はまず仕様がまずいと考えます。上流工程の段階で、顧客とは『「”1年前の今日”以前に投入された、未処理のデータを処理」する夜間バッチ』と合意すべきでした。

仕様整理により、2012-02-29のデータは、2013-03-01のバッチで正常に処理対象とされます。また、元の仕様に立ち返ると、ひとつのデータが2度処理されることは有り得ないため、その要件を満たすように処理未済フラグ等のカラム(タプル)をテーブルに追加して、検索条件に付与します。但し、業務上は処理日時を各データに持たせることが多いため、フラグとして新たに定義する必要はない場面が多いと思います。(processedはデータが処理された日付を表現するとします。バッチの処理対象となったデータは必ず日付でupdateされる仕様です。)

SELECT * FROM HOGE_DATA WHERE created <= date_sub(current_date(), INTERVAL 1 year) and processed IS NULL;

indexを考慮した設計にする必要は別途ありますが。

以上、雑多な思考整理でした。日付関連の仕様を整理するときは、閏日閏年を頭の片隅に置いておいたほうがいいですね……。

docomoキャリアメールでsmtp/imap接続ができるように

docomoキャリアメール(@docomo.ne.jp)がマルチデバイス対応(smtp/imap接続が可能)になりました。(2013年12月17日対応

元々は「spモードメール」というアプリだったのですが、この前「ドコモメール」というクラウドでメールを管理するアプリ/方式に変更されていました。当時時点で、マルチデバイスやWeb対応もアナウンスされてはいたのですが、2013年12月17日にやっとサービス開始しました。smtp/imapにも対応しているため、使い慣れないdocomo謹製アプリはアンインストールしてしまいましょう。

Mobile(Android)

AndroidではK-9 Mailがオススメです。但し、docomo謹製「ドコモメール」アプリ以外ではプッシュ通知されませんので、定期的に新着チェックする設定にしてやる必要があります。

設定完了すると下記画面のように表示されます。

K-9 Mailのアカウント設定後画面

K-9 Mailのアカウント設定後画面

PC(Windows/Firefox)

PCではFirefoxのアドオンであるX-notifierが良さそうです。私も前はThunderbirdを使っていたのですが、最近はSNSツールが発達してきてメールを使うことが少なくなったこともあり、ブラウザで十分だと感じています。そのため、あえてメーラを使うことをやめました。

余談ですが、Windows8.1pre→Windows8.1でCドライブが初期化される罠にかかったことをきっかけに、Operaにも無事見切りをつけられてめでたくFirefoxに乗り換えました。それから、ブログ化してからめったに使わなくなったFFFTPをFireFTPに乗り換え、ほとんど見ない2ちゃんねるブラウザはJaneStyleからchaikaに乗り換えました。最近はFirefoxに依存して生きています。

さて、話を戻すと、X-notifierは下記設定で使っています。リンクは「https://mail.smt.docomo.ne.jp/mail」に設定しておくと便利です。

X-notifierのdocomo設定画面

X-notifierのdocomo設定画面

まだX-notifierは使い慣れていない(以前はGmail Managerを使っていた)ので、これから使い込んでみます。

GoogleCalendarで追加したカレンダーがAndroidで表示されない事象の解決

GoogleCalendarで追加したカレンダーがAndroidで表示されない事象の解決メモです。

ジョルテカレンダー等も根っこはAndroid標準のカレンダーデータを使用しているので、同じ手順で解決できます。Android標準のカレンダーアプリでも追加したカレンダーが表示されていない時に効果のある手順です。逆に、標準カレンダーに表示されているのに、ジョルテに表示されていない等の事象は、ジョルテの再インストールで直るかもしれません。

Androidのカレンダーデータを一度クリアして、再度読み込みさせる手順で解決します。細かい手順は端末メーカによって違うので適宜読み替えてください。

  1. 設定>アプリ>すべてのアプリ>カレンダーの保存>データを削除
  2. 設定>アカウント>Google>同期>カレンダーの同期 のチェックを1度外して付ける
  3. 同期が終わると追加したカレンダーが表示される