min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

dカードGOLD 回線利用料から獲得したdポイントをプリペイドカードにチャージして現金として使う

dカードGOLDの契約により、ドコモ利用料の10%がdポイントとして付与される。契約から3ヶ月、2018年3月分としては600円分が付与された

min117.hatenablog.com

しかしdポイントなんて、そのまま持っているだけでは何も役に立たない。コンビニ(ローソン)で商品購入に使えるが、肝心の「dポイントで買える」商品は、そのぶん元の値段が高く設定されていて、ポイントで買う意味が全くない。全然お得じゃない。

しかしdポイントの良いところは、それを使ってプリペイドカードをチャージできるという点だ。

min117.hatenablog.com

プリペイドカードはチャージした金額の限度で普通のクレジットカードと全く同じく使えるのでどんな買い物にも利用できるdポイントはつまり、プリペイドカードdカードプリペイド」にチャージすることによってAmazonだろうがメルカリだろうが楽天市場だろうが、どこでも使えるお金に変身するということだ。これは本当に素晴らしい。

 

 

<チャージする>

さっそく、今月獲得した600ポイントを、dカードプリペイドにチャージする。まずはdカードプリペイドのサイトに行ってログインする。

d-card.jp

右上の「ログイン」ボタンからログインする。隣にある「dPOINT」は全く別のサイト(ポイント数の確認)なので無視する。

f:id:min117:20180310091333p:plain

今まで貯めてきた金額が 12,131円 もある。プリペイドカードのさらに良い点は期限切れがないこと。dポイントのままだと期限切れで使えなくなってしまうことがあるが、プリペイドカードにチャージしてしまえば(現金と同じなので)一定期間で使えなくなるなんてことは一切ない。安心して貯蓄しておける

f:id:min117:20180310092213p:plain

今回獲得した600ポイント(600円分)を使って「dポイントからチャージ」していく。もともとあった端数も入れて602ポイントをチャージする。
f:id:min117:20180310092009p:plain

なお「期間限定ポイント」ではチャージできないので要注意。様々なキャンペーンで「10,000ポイント付与!」とか広告が踊るが、ポイントサービスは「期間限定」という文字が付いたら無価値なので、見た瞬間に広告を閉じてよい(時間の無駄)。

f:id:min117:20180310092016p:plain

「確定」を押して画面を進めると「d払い」の決済画面に行く。ネットでの買い物を、スマホやケータイの利用料金で決済するときに使われる「d払い」の画面が、ポイント決済にそのまま利用されているようだ(それって脆弱性になりそうな気もするが。まあいいや)。

f:id:min117:20180310092022p:plain

チャージ完了。今月の我が家の通信料として支払った 8,200円に、600円がバックされた形だ。

f:id:min117:20180310092028p:plain

残高も増えている。しばらく使わないで貯めておこう。1年使ってどれくらい貯まるか様子をみることにする。

f:id:min117:20180310092034p:plain

後記)

契約から半年後のポイント獲得数はこちら。

min117.hatenablog.com

dカードGOLD 回線利用料の10%がポイントバックされない → サポートに電話して状況を確認

年会費10,800円のdカードGOLDに加入して丸3ヶ月。やっと回線利用料の10%がポイントバックされる時期になった。

min117.hatenablog.com

 

ポイント付与状況を明細で確認してみる。ドコモのdポイントは毎月10日に付与される。本日は2018/3/10なので、付与されるはずだ。

<回線利用料>

 まずマイドコモにログインして今月(3月)の回線利用料を確認する。 2回線分で 8,282円 だった(二つ折りケータイ+ドコモ光)。

dポイント付与にあたっては1,000円未満は切り捨てられる(←最悪だこれ)ので、8,282円の利用だと(820ポイントではなく)800ポイントになる

f:id:min117:20180310091251p:plain

次に dポイントクラブ にログインしてポイントの付与状況を確認する。800ポイントついている…はずが、600ポイントしか付与されていない!

f:id:min117:20180310091203p:plain

おかしい。「期間・用途限定」の22ポイントは買い物してついたものだから無視するとして、期間や用途の限定のないdポイントが602ポイントしかない

「ポイント獲得・利用履歴をみる」ボタンから履歴を確認してみる。

f:id:min117:20180310100712p:plain

なんと、付与履歴で見てもたったの600ポイントどまりになっている。明らかに付与ポイントが足りない。

二つ折りケータイ(利用料3,204円

 → 本来300ポイント付与のはず

 → 今回200ポイントしか付いていない

f:id:min117:20180310091243p:plain

ドコモ光(利用料5,400円

 → 本来500ポイントのはず

 → 今回400ポイントしか付いていない

 

これでは高い年会費を払ってゴールドカードにしている意味がない。

カード契約前、ドコモショップの担当者が言っていたのは

ドコモ利用料の10%もバックされるんだから、年会費なんてすぐにモトが取れますよ!」

「例えば毎月のドコモ利用料が9,000円なら、1ヶ月に900ポイントもつきますから!12ヶ月使えば(900pt × 12ヶ月 = 10,800ポイント = 10,800円分だから)年会費分はペイしちゃいますよ!」

だった。

毎月の利用料は、さすがに9,000円まではいかないが、それでも8,000円は確実に超える。ほぼ年会費のモトが取れる。そう思って契約したら、8,282円の利用で600ポイントしか付与されていない。これでは、dカードGOLDは誇大広告の詐欺カードということになってしまう

ドコモの窓口に電話して状況を聞いてみることにする。

Python 入力文字列を1字ずつ評価する(固定文字列と入力を1文字ずつ比較)

最近 paiza がお気に入り。転職じゃなくて、プログラマ向けのコーディング例題が面白い。

paiza.jp

例題)以下をコーディングせよ

① 4 回まで入力を試せる

 paiza が暗号文字列(固定)。

③ 入力文字列を捕捉して②と比較する。

・sdfpaizaoiu が最初に入力された文字列。暗号を含むからOK。

・sdfpaizoiu が次の入力文字列。暗号を含まないからNG。

paxiza が3番目の入力文字列。暗号を含むからOK(余計な文字は1つまでOK)

paxizya が4番目の入力文字列。暗号を含むけど余計な文字が2文字以上あるからNG

 

コンソールから①、②、③ の順に入力していって、試行回数が①に達したら終わり ってことのようだ。

②暗号文字列③入力文字列を、1文字ずつ比較する必要がある。

 

とりあえず、文字列を比較して一致するか確認するところまでは作った。

f:id:min117:20180306000047p:plain

ソース(Python 3)

f:id:min117:20180306000409p:plain

あとは

・一致した回数を数える

・一致が連続しているかを調べる

・試行回数を超えたか調べる

等を実装する必要があるだろう。

これくらいはあまり考えなくても手が作れるくらいになりたいがまだまだ遠い。まずは簡単なところからやっていく。

※ 実際の問題文はこれ

f:id:min117:20180305234615p:plain

f:id:min117:20180305234625p:plain

f:id:min117:20180305234631p:plain

自分のDropboxやGmailのパスワードが流出していないかをPythonで調査する → 成功

 

スマホを見ていたらなかなか面白そうな記事。パスワードが流出済みかを検索できるサイトがあるようだ。

forbesjapan.com

f:id:min117:20180304101217p:plain f:id:min117:20180304101224p:plain

 

f:id:min117:20180304101228p:plain f:id:min117:20180304101233p:plain

f:id:min117:20180304101237p:plain

このサイトらしい。Have I Been Pwned?(私って今まで流出したことある?)、略して HIBP というサイトだ。

haveibeenpwned.com

 

上記記事の見出しが「流出済みパスワードが検索できる」とあるがこれは記事を書いた人の(わざとの?)間違いと思われる。

パスワードが検索できるのではなく、あくまでパスワードが漏れたことがあるか履歴を検索できるのみのようだ。

記事の中でも「履歴が」と言ってるだけで、パスワードそのものが検索できるとは言っていない。見出しがミスリードな気はする。

 

とはいえ、非常に有用なサイトであることには変わりない。使い方は簡単で流出しているか調べたいアドレスemail address欄に入れて「pwned?」ボタンを押すだけ。

Have I been pwned? Check if your email has been compromised in a data breach

早速やってみる

f:id:min117:20180304102258p:plain

ガッツリ流出していた

英語表記だが内容はカンタン。要は dailymotion と Dropbox で流出していたよ、と言う結果が出ている。

まあ、使っていたのは捨てアドレスだったから問題ない。Webで使うサービスは、いつハッキングされても捨てられるダミーでやるのは当然だから。

HIBPの使い方はこのサイトが詳しい。

www.bousaid.com

今回の結果をもう少し具体的に見てみる。

f:id:min117:20180304103139p:plain

dailymotion

 Eメールアドレス、パスワードユーザ名が流出した

Dropbox

 Eメールアドレス、パスワード が流出した

と分かる。しかし、

f:id:min117:20180304103613p:plain

no pastes となっているので、流出したデータはもう残っていないという結果になっている。

これが

f:id:min117:20180304103547p:plain

のように、3 pastes (3件 pastsesに残っているよ)だとヤバい流出したうえに、公開されてしまっているということだ。そんなIDやパスワードの場合は、もしかしたら「3 pastes」の文字のすぐ下くらい表示されてしまうのかもしれないが、そんなIDは持っていないので今回は試しようがない。良識あるWebサイトはそんなことしないと思うけど。

pastes について>

  おそらくだけど「pastebin」のことを言っているのだろう。以前 Hotmail のアカウントをハッキングされかけたことがありネットを漁ったが、どうやら流出したアドレスは paste(貼付け)bin(バイナリ)という掲示板サービスに貼り付けられることが多いようだ。HIBPはこの pastebin の最新情報を見に行って流出しているかを調べているらしい。

なお、pastebin掲示板サービスは今でも(ググれば)普通に出てくるだろうが、知識がないまま行くとウイルスが仕込まれていたりするので興味本位では近づかないほうがいいと思う。今なら bitcoin のマイニングを仕込まれちゃうとか、充分ありそうだ。開発等の都合で訪れるとしても充分注意が必要だろう。念のため 仮想端末+捨て回線 を使うとか。

 

話が逸れたが、ここからが本題

HIBPによると、流出したIDパスワードHIBPのAPIを経由して読みだせるようだ。

haveibeenpwned.com

しかも。このAPIを使った AndroidアプリやiOSアプリがすでに公開されている。

haveibeenpwned.com

f:id:min117:20180304110316p:plain

しかしだ。Androidアプリは全く信用できない。とくにセキュリティに関するものは。今回も「パスワードが流出したかを確認するアプリ」を装って「パスワードを入力させて盗み取る」アプリである可能性は否定できない。基本的に「ネットに転がっているアプリはオレオレ詐欺だ」と思っているので。ATMに誘導される老人のようにリンクを踏む気にはなれないのだ。

その点iOSアプリはまだ信用できる。OSの強固なセキュリティがあるし、さらにはAppleアプリ開発ルール(必ず審査がある)によって、安全であることがほぼ担保されるからだ。

しかし今回は、アプリは使わない。なぜなら、Python スクリプトが公開されていたから。

 f:id:min117:20180304110800p:plain

使うならやはりPythonソースから何をしているか(ある程度は)追うことができるし、自分で実装もできる。何より RaspberryPi の閉じた環境で実行させられるから、何かしらのウイルスであってもネットから切り離してしまえば対処できるからだ。

ということで、一つ目のリンクのPythonスクリプトを早速試してみる。

f:id:min117:20180304111030p:plain

スクリプト作成者は「caseydunham」という人らしい。うーむ。見た目は怪しい気もするが。人のこと言えないか。

github.com

「clone or download」からソースを取得する。今回は zip でダウンロードした。

f:id:min117:20180304111426p:plain

落としたzipをRaspberryPiに移動して解凍。pwnedcheck というフォルダができた。中にある README.rst を読んでみると、サンプルスクリプトが書いてある。

f:id:min117:20180304111630p:plain

print文にカッコがないところからすると python2.7 で書かれているようだ。手元のRaspberryPiの環境は python3 になってしまっているので、pyenvを使って2.7環境に変える。

f:id:min117:20180304111552p:plain

ダウンロードした PwnechCheck をpipからインストールする。なぜかsudoしないとうまくインストールできなかった。pyenvまわりの設定がおかしいんだろう。

$ sudo pip install PwnedCheck

f:id:min117:20180304112740p:plain

サンプルのとおりのスクリプトを書いてみる。

$ vim myPwnedCheck.py

f:id:min117:20180304113002p:plain

実行もsudoをつけてやる(そうでないと moduleなしエラーになってしまう)。

$ sudo python myPwnedCheck.py

f:id:min117:20180304113117p:plain

上記 README.rst によると、戻り値が[]の場合は流出なしだ。流出はしたものの、pastebinに残っている情報は無いとのことで、安全と判断できる。

あとはテスト用にたくさん持っているダミーアドレスがのうち流出してるのはないかこのスクリプトに食わせて確認してみよう。来週でもやってみる。

追記)

調査の途中で面白そうなサイトも見つけた。

楽しいPwn入門 · GitHub 

後で読む。

 

PHP からbashコマンドをノンブロッキング(非同期処理)で実行する

 

PHPからbash実行

PHPソースコード内でLinuxのシェル(bash)を呼びたいことがよくある。例えば

A.ラジオを録音するためのこんな画面(recRADIO5.html)を開発していて

f:id:min117:20180303232249p:plain

B.「録音開始」を押したら録音画面(recRADIO5.php)に推移

f:id:min117:20180303232600p:plain

C. 録音ファイルをいつでもどこでも聞くことができる

f:id:min117:20180303232552p:plain

を実装しようとしているが、B.のとき画面が固まって困る

より具体的には、B.でphpからLinuxシェル(bash)コマンドを呼んでいるのだが

f:id:min117:20180303233105p:plain

そのbashコマンドの実行結果が返ってくるまで、PHPが画面を固まらせてしまっている

解消法がわからなくてホトホト苦労したが、やっとやり方がわかった。

 

 

 

PHP からbashコマンドをノンブロッキング(非同期処理)で実行する方法

 

① bashコマンドの末尾にアンパサンド(&マーク)を付けてバックグラウンド実行する

② bashコマンドの出力は >> /dev/nullに捨てる

③ bashコマンドは必ずsudo実行する。でないと >> /dev/null に書き込めない!

 → phpがsudoコマンドを呼び出せる権限を持っているか(httpd.confまわりの)確認必要。

④ bashコマンドは、頭にshをつけて別シェルで実行する!でないとなぜかブロッキングかかる

⑤ php内から実行するbashコマンドは一旦 $command変数に格納してから shell_exec("$command"); としたほうがよい。

 → shell_exec()引数内に直接コマンドを書くとなぜかブロッキングかかる  

 

ソース文字列はこんな感じ。

// ./folder1/folder2/rec_radiko2_2/rec_radiko2.sh JOAK 1 id_desu@gmail.com pass_desu /media/MUSIC JOAK > /dev/null 2>&1 &

// ./folder1/folder2/rec_radiko2_2/rec_radiko2.sh ' . "$myCH" . ' ' . "$myMIN" . ' ' . 'id_desu@gmail.com pass_desu /media/MUSIC' . ' ' . "$myCH" . ' > /dev/null 2>&1 &

$command = 'sh /folder1/folder2/rec_radiko2_2/rec_radiko2.sh ' . "$myCH" . ' ' . "$myMIN" . ' ' . 'id_desu@gmail.com pass_desu /media/MUSIC' . ' ' . "$myCH" . ' > /dev/null 2>&1 &';

順番にみていくと、まずは行末が大事

$myCH" . ' > /dev/null 2>&1 &';

となっている。アンパサンド(&マーク)を使ってbashコマンドをバックグラウンド実行しているということだ(上記①)。

qiita.com

さらにまだ行末が大事

$myCH" . ' > /dev/null 2>&1 &';

となっていて、出力をnullデバイスに捨てているのだが(上記②)、そのためにはnullデバイスを使える権限が必要なわけで、つまりsudoで実行しなければいけない(上記③)。今回はなぜかsudoなしで成功したが、うまくいかないときは「bashコマンド先頭にsudoをつける」をとりあえずやってみるのが良さそう。

最後は行頭に目をやると、

$command = 'sh /folder1/folder2/rec_radiko2_2/rec_radiko2.sh '

となっていて、ラジコ録音スクリプト(rec_radiko2.sh)を、別のシェルで実行させるために頭にshを持ってきているのが分かる(上記④)。

シェルコマンドの実行方法はこの本にまとまっている。

f:id:min117:20180304000354j:plain

Linuxシェルコマンドでは他の追随を許さない最良の本だと思う。 改訂第3版が最新だけど、改訂新版でもほぼ同じだから、中古でもなんでもいいから1冊は持っておくといいと思う。

 

いやはや、今回はやりたいことの情報がGoogleですら取れなくて苦労した。

PHP ノンブロッキング bash で検索しても、全くそれらしい情報に当たらないし。

PHP バックグラウンド実行 bash で検索して、やっとこのへんが参考になった。

takuya-1st.hatenablog.jp

PHPでの非同期処理はnode.jsが常道らしいが、

qiita.com

単にbashコマンドを実行したいだけなのにnodeサーバを立てること自体がだるいので、今回は参考程度にしておいた。

 

 

 

 

その買うを、もっとハッピーに。|ハピタス

 

Amazon Echo Dot が届いたので開封 …しない

Amazonのご招待を受けて購入した Echo Dot。

min117.hatenablog.com

購入割引が適用されずに色々あったけど、無事届いた。

 

Google Homeの箱と比較。とても小さい。

f:id:min117:20180303080740j:plain

販売数 x 配送数 を考えれば、こうした無駄のない小さいパッケージは最良と思う。

f:id:min117:20180303081144j:plain

アマゾンエコーは、個人的には、始めからこの小さいタイプ(Echo Dot)が欲しかった。しかし最初に招待されたのは縦長のほう(Echo)だったから。

min117.hatenablog.com

Dot は小ささが最高にカッコいい

www.youtube.com

大きさ比較。

左から iPhoneSE、iPhone4s、echo dot、iPhone5siPhone6

f:id:min117:20180303081219j:plain

既にもっている「Echo」と比べても遥かに小さい。

f:id:min117:20180303081323j:plain

f:id:min117:20180303081751j:plain f:id:min117:20180303081818j:plain

Fire TVを買った時も「小さい箱だなぁ」と思ったが、さらにコンパクト。

f:id:min117:20180303081433j:plain

min117.hatenablog.com

開封したい。が、まだしない。Echoでスキル開発をテスト中だから。充分使えることがわかったら開封して別の部屋に置き、生活の中に溶け込ませる。

 

 

Amazon Echo Dot の購入に招待されたので即購入する

だいぶ前に「購入の招待申込み」をしていた Amazon Echo Dot。招待制、つまり Amazon社から「あなたは購入者に選ばれましたよ!」という通知がなければ買うことすらできない。それがアマゾンエコー。さすがの殿様商売だ。

そんなAmazonから、突然の通知が届いた。

f:id:min117:20180303000008p:plain

「Echo Dotの招待者に選ばれました」とのこと。選ばれた特典として、通常5,980円の Echo Dot を2,000円安く買うことができる

f:id:min117:20180303000013p:plain

2,000円OFFで買えるのはこのメールを受け取ってから4日間だけ。招待制な時点で既にイヤラシイが、こうやって期限をつけるのもまた購買を促す商売のうまさ(というかイヤラシさ)がある。

まんまと乗る。速攻ポチった

f:id:min117:20180303000042p:plain f:id:min117:20180303000032p:plain

スマートスピーカーはたくさんあっても困るまい。カスタマイズ(スキルを作る)で遊べるし。なによりAmazon Echo はカッコいいから。

f:id:min117:20180303000106p:plain f:id:min117:20180303000042p:plain

色は黒一択。汎用性がほしい。

f:id:min117:20180303000048p:plainf:id:min117:20180303000054p:plain

カバーは要らない。

f:id:min117:20180303000101p:plain

 

 

あれ?ポチる前に色々いじってた値段が2,000円引きになってないぞ?まあいいや。ポチる。

f:id:min117:20180303000158p:plain

購入後に注文履歴を見てみたが、どうもおかしい。どこにも「2,000円OFF」という表示がない。注文メールでも「5,980円」のままだ。

f:id:min117:20180303001857p:plain

おかしい。このままでは正規の値段で買わされてしまう。速攻でAmazonのサポート窓口にメールで問い合わせした。こういうのは早いほうがいい。

30分後、回答がきた。

速い。Amazonは本当に仕事が速い

「本来であれば…2,000円分の割引が受けられるはずのところ、適用されておらず、正規の料金となっていることを確認いたしました」

「そのため、カスタマーサービスにて割引分の2,000円を返金するよう手配いたしました

f:id:min117:20180303002031p:plain

すごいね。このスピード感。さらに10分後には「返金処理が完了しました」連絡が飛んでくる。どうなってるんだこの会社は。すごいなホント。

f:id:min117:20180303000026p:plain

なぜ最初から2,000円が割引にならなかったかは分からないが、通信環境が悪いところで何度か「注文を確定する」を押してしまったからかもしれない。それでも不便を補ってあまりある対応の早さに、不満は全くない。ここまでしなくてもいいのにという気もする。

 

そして翌日。Echo Dotが届いた。注文から到着までわずか1日弱。

週末で開封する。