それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ffmpeg でDVDのリッピング

DVDのVOBファイルを CAT で結合してffmpeg でコンテナを変更する

 cat VIDEO_TS/V*.VOB | ffmpeg -i pipe:0 -vcodec copy -acodec copy c:/users/takuya/dvd_ripping_test.mpeg

自分で撮ったムービーのDVDに限られますけど。

個人情報について思うことなど。

氏名や住所、勤務先は公開情報ですよね。

名刺を配ったり、住所を登録したりするので、氏名と住所はもはや公開情報です。訊いたらわかるし。

本人を特定できる情報とは何か

以下のような場合、男子の名前だけで、誰かが特定できる状態にあります。

34年間女子しかいなかった高校に男子1人が入学決定wwwwwwww
(41f0a719-s)

彼の場合、「高校名+男子」の属性情報があれば特定できるわけです。名前は必要ありません。

給与情報テーブルの名前を隠しただけで個人情報保護か?

会社名+給与の金額でも容易に個人が特定できますよね。社長+社員が3名の会社の場合はもう誰がいくらもらってるかバレバレなわけです。
第三者からみても金額が一番少ないのが社長*1、その次が若手か入社年度の浅い人だと想像が容易ですよね。。

名前+住所+電話番号が個人情報と思ってる人が多すぎじゃないでしょうか。

隠さなくていいと言ってるわけではなくて、個人が特定できるレベルって千差万別よね。

乗車履歴も個人情報ですよ

乗車履歴が個人情報に当てはまらないと思ってる、まさかそんな人は居ないと思うけど。PiTaPa/PASMOの乗車履歴は、バレてもよさそうな個人情報と思ってるフシがあって、そこが気になった。

交通ICカードの乗車履歴は、リーダーで簡単に見られるから、そんなに神経質にならなくていい、ってのが電鉄各社の本音だろうけど、そもそも簡単に見られる現実が甘いんだよね。サイバネ規格は公開するべきだし、交通ICカードのプログラムはGNULGPLに近いライセンスにしてコードを公開させるべきだと思う。

不正なプログラムがレジで情報抜いてないか誰がチェックできるんでしょうか。

串刺し検索が出来る権限こそ本質だと思うんだ。

乗車履歴と住所、氏名を関連付けて串刺し出来るから個人情報を守らなくちゃいけない。串刺しできないようにしてもいいし、不特定多数に串刺しで検索されないようにしないとダメだよね。

公開情報や個人情報と、別の個人情報を紐付けて、串刺し検索していけるような仕組みはあやういと思う。その場合串刺し検索ができる人と串刺し検索できる人に権限と管理をしっかりさせないとダメだと思うんだ。誰がいつどこで何を串刺し検索したか。その履歴が残ってないと怖いよね。

*1:または一番多い、社長ってあれだからさ一番少ないことも多い

コレもヒドいダダ漏れ。サイボウズで会社名と社員名がダダ漏れな件について

あるブログで見かけました。。サイボウズ利用者の皆さんは公開大好きです。

サイボウズの旧版を放置している会社の社員情報バレバレです。

検索してみよう。

次のリンクをクリック→サイボウズ ログイン 名前 パスワード filetype:cgi

いっぱい出てきた。

(スクリーンショット 2012-03-07 21.17.53)
(スクリーンショット 2012-03-07 21.19.03)
(スクリーンショット 2012-03-07 21.19.48)

「◯◯部の◯◯さんお願いします」って言えば簡単にテレアポ営業出来るんじゃないですかね。ってかかれてたけど、全くそのとおりだと思いました。

テレアポさん頑張って。

情報って怖いです、Googleさん怖いです。

あわせてオススメ、Desknets

(スクリーンショット 2012-03-07 21.18.17)
desknets グループ 氏名 filetype:cgi

Desknetsは何の対策もしてないみたいなのでした。

aipoの営業マンはDesknetsを使用している会社に重点的に弾幕営業をかければいいんじゃないでしょうか。

たしかサイボウズは対策済みです

ソース忘れたけど、サイボウズは対策しているはず。
むしろ2006年のサイボウズをそのまま放置している運営者側に問題があるかも。でもサイボウズを起動させただけで一杯一杯だよねたぶん。

というわけで、サイボウズで会社情報を公開しちゃってどうしていいかわらない。
そんな会社さんからの問い合わせお待ちしておりますよ(笑


desknetsの皆さん頑張ってください。

見た感じ、desknet'sは何の対策もしてないみたいなので、とりあえず、利用者に通知をするところから始めたらいいんじゃないでしょうか。



追記:

Twitter経由で教えてもらいました。サイボウズの脆弱性はこれじゃないかな。

http://jvn.jp/jp/JVN31125599/374951/index.html

っていうか製品の有効期間切れてるからサイボウズは悪くない。放置してる管理者に責任があるんだろうけど・・・WEBアプリって怖いね。

これはヒドイ。PiTaPa倶楽部はアカウント乗っ取りを公式に推奨中

ある日、Twitterを見ていると。「ピタパクラブは上書き登録可能。」と見かけた。

#pitapa 倶楽部がひどいのは、とあるカードに対してユーザー登録が既に行われてても、上書き登録ができてしまうこと。なので、攻撃者が対象者のアカウントを上書きすることが可能になるという凄い実装。

https://twitter.com/#!/cetacea/status/174094663861542912

そうだったの・・・知らなかったです。上書き登録出来るとかヤバイんじゃないの?早速試してみよう。

ピタパを知らない人に解説すると、ピタパは、パスモに先駆けて、関西私鉄で使える交通ICカード。後払いが特徴。あとから回数券分相当が割引されて請求される。とっても便利なサービス。

Pitapa倶楽部はID乗っ取りが可能。

登録済みPiTaPaに対して、ID乗っ取りが可能です。実際に試しました。

でも悪いことじゃないです。ID再登録はピタパ発行元も推奨する乗っ取り手段です。

以前、ピタパ紛失時にコールセンタで「ピタパクラブはどうすればいいですか?」って訊いたら、再登録できるから大丈夫ですって言われたの。それ思い出した。

悪用しなければいいんです。悪用しなければいいんです。悪用しなければいいんです。

大事なので3回言いました。

再・登録じゃなく、パスワード再設定できないの?

ピタパクラブは、パスワード再設定ができません。パスワード紛失時には新規登録で上書きします。

PiTaPa公式サイトの説明

(新規登録っすか)

「再発行なし=>新規登録を推奨」が公式見解だそうだ。

パスワードにつきましては、お忘れになられた場合、改めて(略)新規登録の手続きをしなおしていただく必要がございます。

再度新規登録だと何がまずいか?

簡単にアカウントを乗っ取れます。

  • Pitapaカード番号
  • 電話番号
  • 生年月日
  • フェリカID
  • クレジットカードの有効期間

これらがセットになれば、いつでも再登録できる。

PiTaPa安心じゃない。

いまから、彼女のピタパクラブのカード上書きしてみよう

実験してみた。

番号入力してー
(上書き!)

上書き登録しました。

以前のIDでログインすると・・・

(上書きされた側)


既存アカウントは無効化された。彼女のPiTaPa履歴が見放題です。アリガトン

電話番号と生年月日を知りうる人は、簡単に乗っ取れるということです。

電話番号と生年月日は公開情報だから、PiTaPaカードさえ見れれば誰でも履歴にアクセス可能で、登録情報変更可能ですね。*1

じゃぁピタパの履歴を見るには。ピタパカードを入手して、ってそんな必要ないかもよ。



カード無しで、ピタパのカードIDを入手する。

レシートにフェリカ番号乗るからね、ピタパの支払いレシートがアレば十分。レシートがあればFelicaID入手完成。*2




(レシートに載ってる)

0027が僕の下四桁です。もう公開情報にしておくわ

Pitapa会員番号IDを取得する

利用明細にピタパの番号乗るからね、明細手に入れたら、13桁入手。

(送付される明細にPitapaIDが!)
(マスクされてるけど。)


追記:僕のエメラルドスタシアのPiTaPa会員番号はクレジットカード番号と同じでした。

これでほとんど丸裸だよね。

生年月日・電話番号は公開情報、ピタパ番号(16桁中13桁)が請求書記載、フェリカ番号(下4桁)がレシートに記載。

登録に必要な番号のうち残る番号は、カード有効期限とピタパ会員番号3桁のみ。

その内の、カード有効期限ってのは隠しているうちに入らない。4桁ですが1000通りもありません。

有効期限はつまり60通りです。年はせいぜい5年だから5個、月は12ヶ月だから12個。

ピタパ番号は数字3桁だから1000個。つまり高々60,000通りの総当たり攻撃で登録可能になる。



いまできることは、

ピタパクラブには定期的にログインして、アカウントの有効チェックするしかないね。

これが日本の技術力。こういう疑問符が出るシステム作る会社が国民ID関連の会議に入ってるんだろうね。ヤダヤダ

PASMOの履歴問題といい勝負かな。というか、会員情報変更できる分、ピタパ倶楽部の方が被害が大きくてヤダ。

ここがPASMOと違うところ。

PiTaPa会員番号がクレジットカード番号と同等でした。なのでPASMOと違いPiTaPaは利用者が番号の取扱いが慎重なことを知っている。*3

PASMOの場合、履歴がWEBで見られることを「周知不足」だと指摘されていて、「公開情報」で登録可能な点が問題を大きくしていた。
PiTaPaの場合、履歴がWEBで見られることを「大前提」で履歴収集している。「クレジット番号」で登録必須な点が問題を見えなくしてた。

PiTaPaPASMOを同一視して攻撃するのは違う。


どうすればいいですか?

システム作る会社さん、問い合わせ待ってるからね。今回も。

ピタパクラブだから、アイテック阪急阪神と、大阪市営地下鉄とピタパ協議会と京阪◯◯とあたりからの問い合わせは歓迎するよ。
優しい解説と改善提案するから僕を雇って!(違

*4

*1:パスワード+メアド登録が意味無いじゃん。

*2:裏面の黒背景白抜き番号

*3:まさかPiTaPa会員番号とクレジットカード番号が同一だとは・・・

*4:ちなみに彼女ってのは脳内だからね。

PiTaPaやSuicaのIDと個人情報と紐付けるはNGじゃないかな

もちろんIDmは取得可能なんだけど、IDmに個人情報を紐付けるのはちょっと待ってほしい。

うちの妹に相談されたことがある。

鉄道会社ってPiTaPaとかICOCAで入退室出来るんでしょ?あれ、ウチの会社でも使いたいんだよね。
アルバイトが増えてきたから、出退勤管理したいんだけど、新規でカード作るの面倒なんだよね。
金かかるし。嘘の出勤申告防げないし。

定期券のICカードなら、利用履歴あるし、持ってないと出勤できないから丁度いいと思うんだよね。


これ返事に困った。IDは誰も読みだし可能だから、それを使うのはいいかもしれないんだけど、出退勤は個人情報になり得るだろうし。
IDと個人情報を会社が持っちゃうと、下手すりゃその人の行動を全部取れる可能性が出てきちゃうんだよねぇ。
出退勤、入退室、定期券までワンストップで全部やっちゃうと、たしかに便利なんだけど、そういうログをどうするのか。それに思いが至らないのはちょっと困る。下手に情報持ってりゃなんかの時に責任問題になるだろうが。会社と労務でちゃんと情報取扱規定を定めないとダメだよね、出退勤の利用は。っていうか、鉄道会社とサイバネ規格ははIDmを出退勤替わりに使うのをどう見てるの?

Suica/PASMOで出退勤とかどうなん?

なんかすげーFelica関連のソフトウェア増えてるけど、IDmとそのへんのところ詳しく教えてもらえないか?


ちゃんと正規のSDKなの?


かざすとか、その気になれば交通利用履歴を抜けるだろうし。抜いてないって言えるの?

そもそもPitapaで決済以外に会員登録とかにも使われるよね。ああいうのどうなのさ。時々レジでフェリカ・リーダー見かけるけど交通利用履歴抜いてないって何処に証拠あるのさ。

一般利用者はFelicaを交通以外用途に使うことに無駄に慣れている気がする。


会社に定期ICカード使って出退勤してくださいと言われた時に、個人情報を抜くのはヤダ。Noと言ったらクビになるだろうなぁ。

日立は賢い。

既存のカードに追加で貼るだけ。
http://www.hbs.co.jp/ad_netacs/index.html#merit01

これがまともだろう。たしか横浜市が使ってたよね。こうすればIDmやらFelicaやらに悩まされない。こうあるべきだよ。

定期券の購入証明出してください。

別の会社で6ヶ月分の定期の購入証明が必要とのことで、定期券を提出したことがある。そして定期券の番号を控えられた。


今思うと、PASMOってこういうことだよね。

会社には定期券の購入証明で提出する、番号をメモる。甘い会社はフェリカのID番号をメモる。
会社にID差し出してたら、住所も電話番号も性別もあるから人事部なんて交通利用履歴を見放題じゃないですか。

PiTaPaがププとピピの鳴り分け解説・・・ヤバイw

PiTaPaを通した時の音、これは状況に応じて鳴り分けてます。知ってた?

9種類あるそうです。

(スクリーンショット 2012-03-07 3.04.49)

プ、ピとかなんだこれは。(笑

一応公式のパンフレットなんだけどさ。

(4d55f6942b66074195c7625c1a3d1488)


ピタパの音での利用状況の違いが・・・


おもしろすぎる

とりあえず、改札で音が二回なったら定期の期限が近いってことで。

PiTaPaの履歴をカードから読み出すSFviewer

交通系ICカードの履歴読み出しはだれでもできるので便利です。

交通利用履歴は余りに簡単に見れるので、これは個人情報なのか公開情報なのかわけわからなくなってきた。個人情報なんだけど、うっかりさんの電鉄各社とオバカさんなシステム作る会社が公開しちゃった情報だと思うことにしてる。

実際に交通利用履歴を見てみる。

カードリーダーを準備。

うちのおんぼろのカードリーダーを持ってきた。

(リーダー)

SFViewer2で読みだしてみる。

起動画面
(SFカードビューワー)
情報を読み出し。
(WS000001)

認証やパスコードはいらない。

載せるだけで表示される。便利。


Felicaの交通系ICなら大抵見られる。駅名コードが非対応なら読み出せないけど。

リーダー内蔵のVaioなどのPCだとすごく簡単です。


簡単すぎる。交通系の鉄道サイバネ規格は、IDmとIDiと履歴情報へのアクセスをどう考えてるんだろうか。

15年前ならこういう簡単な読み出しでもOKだけど。いまはヤバイよね。

PASMO履歴と比較した場合のPiTaPa倶楽部の問題点

PASMOから派生してPiTaPa倶楽部の問題点が指摘されてるので、ちょっと考えて見てる。

Pitapaパスモはちょっち違うんじゃないのか。

PiTaPa倶楽部に第三者が登録するのを防ぐため、以下の点は必ず守りましょう
カード裏面に記載されている会員番号、カードID、有効期限は絶対に秘密にすること
PiTaPa倶楽部には必ず登録し、毎日ログインすること
カードを長期間利用しない場合は解約を検討すること

http://www.sonorilo.net/2012/03/02/2852

なんか違う気がする。

まず。ピタパについて

ピタパは登録制。ここは絶対抑えておくべきポイント。


Pitapaは登録が前提。
Pasomoは匿名で買える。

ポイントは匿名性。


Pitapaは匿名で買うことができない。匿名で変えないし、クレジットカード機能すら付いている。
発行時に「住所。氏名、電話番号、勤務先」と身分証を送付する。*1

発行後には、PiTaPa番号(クレジットカード番号)が発行される。

記名PASMOの場合「住所、氏名、性別、電話番号」と「Felica番号」を紐付けるのみ。

履歴について

PiTaPaは後払い。履歴を意識する。

利用者は履歴を回収されて当たり前だと思ってる。

Pitapaは登録が前提
そして履歴も前提、だから、ユーザーは履歴が完全に残ってることを知っている。
PASMOは匿名で買える
手軽に買える、ユーザーは履歴が完全に残っていることを知っていない。

履歴が残ってて見られてどう使われるかを、利用者は意識してないと思う。
「記名PASMO」は「再発行」のためだと思ってるんじゃないだろうか。

PiTaPaが問題にならなかったのは。

PiTaPa番号という「通常の第三者に知りえない情報」が提供されていたからだと思う。
*2

クレジットカードでもあるのでレジでも使える。

後払いクレジット故に、利用者の履歴と番号への意識が高かった。

PASMOが問題だったのは、履歴への意識の低さ

PASMOFelicaのIDi(黒背景に白抜き文字)を使い、「住所、氏名、年齢、性別」など公開情報とも言える情報を使った。
匿名で手軽に買える利便性を残したため、公開情報だけの記名PASMO、そして匿名利用ゆえに履歴・番号への意識が低かった。

だからこそタイムズなど第三者が、IDiを識別ったIDiと住所と氏名を自社で関連付けてても違和感無く受け入られたんじゃないかな。

利用者のIDへの意識の低さ、鉄道会社の履歴情報へのアクセスについての周知の低さが透けて見える。

これらの違いが

高木先生に攻め込まれた理由で、そこがPASMOPiTaPaの違いだったんだろうと思います。*3

PiTaPaの問題点も

基本的にはPASMOと同じです。だけど、Pitapaには番号が一つ多い。


PiTaPaの場合、クレジットカード番号を付与していたことで立ち位置がちょっと違ってた。
つまり「カード番号を盗まれたときは、すぐに再発行してください」

PiTaPaはクレジットカード番号(PiTaPa会員番号)を追加発行しているので、これを安易に盗まれるのはユーザーの責任といえるだろう。
サイバーノーガードというよりクレジットカード番号のアクセスと同等と考えられているのでしょうね。

PiTaPa倶楽部の問題点は

サイバーノーガード戦法というより、上書き登録出来てしまうことが問題だと思う。
IDiやクレジットカードが漏れるのは仕方ないことだとしても。

第三者が本人に知られることなく上書き登録しちゃえるのは、問題だと思う。。。



*1:勤務先はやり過ぎだと思ってたら、最近は必須じゃなくなったらしい。あぁまぁクレジットカードだからアリといえばありなんだけど

*2:だけど、クレジットカード番号なので知ろうと思えば知ることが出来るが

*3:まぁ高木先生はPiTaPaなんて使ったこともないだろうし、興味もないだろうけど

はじめてのおっぱいダウンロード。プログラミング男子応援イベント。

男子高校生いや中学生か。円グラフをパイチャート呼んだり、円周率πが2πで360度で、2πが一個で妙に納得したり。1/6 πとか美乳ですよね。とか。積分のデルタが密林でΔだとか。数学とか楽しめます。

そんな男子高校生に送る「おっぱい」

見たくてたまらない君たちに、とりあえず、飽きるまで見ることをおすすめする。飽きたら、現実を見ような。いろいろな意味で。

ゆーすけさんのをRubyで描いてみた。

Perlなんてアレだよね。PyPiPythonが一番向いている気がするけど、Pypiネタはすでにある。じゃぁRubyでエロくダウンロードしてみるか。

rubyでゆるく、エロくダウンロード

rubyにはMechanizeという、最凶ツールと、Nokogirlという無敵ツールがあってWEBからぶっこ抜きに、至高ツールなのです。

おっぱいをダウンロードする方法。

  1. rubyをインストールする。
  2. ツールをインストール
  3. スクリプトを動かす。
  4. ワクワクしながら待つ。

rubyのインストールは簡単。

Macなら初めから入ってるよ。Macを買ったきみはついてる。
Windowsな君は。http://www.ruby-lang.org/en/downloads/ からダウンロードしてインストール。


rubyが実行できるようになると、いよいよ、プログラミングで魔法の時間だ。

ツールを入れる

rubyで使う、Rubyで書かれた、Rubyのためのツールをインストール。

gem install mechanize

スクリプトを動かす

ruby oppi.rb

oppi.rb

プログラミングの本体。

##リクエストを投げる。
require "rubygems"
require "json"
require 'mechanize'
$app_id = "35A40D6D57F***********"
$start  = "http://api.bing.net/json.aspx"
$offset = 0;
$params ={ 
        'Appid'     => $app_id,
        'Version'   =>'2.2',
        'Markert'   =>'ja-JP',
        'Sources'   =>'Image',
        'Image.Count'=> 50,
        'Image.Offset'=> $offset,
        'Adult' => 'off',
        'Query'=> 'おっぱい'
}
$mech = Mechanize.new
$mech.get $start, $params
$ret = JSON.load($mech.page.body)
$ret["SearchResponse"]["Image"]["Results"].each{|e|
  $mech.get e["MediaUrl"]
  $mage.page.save
}

これでおっぱいがいっぱい。

うむ。それでは一気にダウンロード。

なんか楽しいけど、萌えない。

ファイル名がエロくないんだ。ファイル名を、検索結果からつけてみた。


(スクリーンショット 2012-03-05 21.50.16)


ダウンロードを複数起動するとあれなのでスレッドする。

一本ずつダウンロードを待ってられないのが男子中学生。

複数スレッドでのダウンロードのプログラムを参考に書いておきます。
*1

require "rubygems"
require "json"
require 'mechanize'
require 'thread'

$image_url_list = Queue.new
$app_id = "35A40D6D57FEB804B1E1AAD*****************E2B"
$start  = "http://api.bing.net/json.aspx"
$mech = Mechanize.new
$offset = 0;
$params ={ 
        'Appid'     => $app_id,
        'Version'   =>'2.2',
        'Markert'   =>'ja-JP',
        'Sources'   =>'Image',
        'Image.Count'=> 50,
        'Image.Offset'=> $offset,
        'Adult' => 'off',
        'Query'=> 'おっぱい'
}

def oppi_search(n=1000)
  Thread.new{
    $mech.get($start, $params)
    #1000ページまで行こうか。
    n.times{|i|
        #1ページからNページまでの遷移
        $offset = i * $params["Image.Count"]
        $params["Image.Offset"] = $offset
        $mech.get $start, $params
        #
        ret = JSON.load($mech.page.body)
        pp ret["SearchResponse"]["Image"]["Results"].size
        ret["SearchResponse"]["Image"]["Results"].each{|e|
            #ダウンロードリストに追加する。
            $image_url_list.push( { "img_title" => e["Title"], "img_url" => e["MediaUrl"]})
        }
    }
  }
end
#ダウンロードするだけの娘
def download_thread
    t = Thread.new{
        m = Mechanize.new
        m.max_history = 1
        loop {
            begin 
              task = $image_url_list.pop 
              file = m.get task["img_url"]
              #拡張子判別
              ext_name = file["content-type"].split(%r"/").last
              file.save( task["img_title"]+".#{ext_name}"  )
            rescue => e
              puts e
              m = Mechanize.new #エラーがでたらMechanize再起動
            end
        }
    }
    return t
end

##Bing検索スレッド
t = oppi_search()
workers = []
##画像のダウンロードは5スレッドで。
workers << download_thread()
workers << download_thread()
workers << download_thread()
workers << download_thread()
workers << download_thread()

#無限ループ
workers.first.join

*2

励めよ。うむ

他の蒐集も、基本は同じです。検索先がBing→ニコニコになったり、取得対象がJPG→FLVになるだけです。がんばってね。

AmazonでエロDVDが1円

1円で買える時代なのに、エロ画像ってのもの無いと思うんだ。DVDを簡単にMP4にする方法がいいかな?

↓ほらね


rubyを動かしたい人は

初めてのプログラミング をかいなさい。

2012/03/08追記;さらなる高速化へ

更に我慢出来ない人に高速化のヒントを書いておきます。

  • HTTPのKeepAliveが働くように書きなおす
  • DNSルックアップを一括で処理する。

HTTP1.1はKeepAliveで一回の接続で複数回ダウンロードできます。TCP/IPのコネクションのオーバーヘッドがもったいないのでIPアドレス毎に接続を切り分けて、一回のコネクションで複数回ダウンロードすれば高速化できます。取得相手が同じサーバーならそのほうが速い。(特にHTML/JPEGの場合は効果的、FLVのような大きいファイルだとファイルのダウンロード時間のほうが長いのであまり変わらないと思う)

*1:Rubyのスレッドとかプリエンプションが・・・ノンプリとかいうけど、ネットワークIO待ちだと別スレッドに切り替わるしそれなりに効果ある。

*2:15分程度で適当に書いたので、マルチスレッドちゃんと動いてるかなぁ。。まぁいいけど。

もやしもんノートを見つけた。思わず買っちまった。

何気なくAmazon見ていたら「もやし」のノートを見つけた。しかも中身が実用的

表紙が可愛い。




しかも中身がいい感じで

やばい。これは可愛い。
(旅行)
(家計簿)
(自由帳)

紙ノートはいい。

テキストエディタでファイルを書き散らかすと、印象に残らない。ノートだと書いたものを検索しにくい。

僕は、記憶に残るほうが大事だと思う。だから未だにアナログなノートが好きだ。


Evernoteは検索も、デジカメ写真とコメントが残せるのがとても便利だ。でもインデックスが悪い。

アナログなノートを活用するコツ。

インデックスを手作業で作るのです。
(目次)

ノートを書くときにインデックスも手書きする。すると、前後の関係がよく分かるようになる。インデックスは一種のファイル名みたいなものです。

あと、ノートはフォーマットを決めておくといい。白紙の日記とか何を書いていいか迷走する。

だからこのようなテンプレのノートが便利なんだ。

でもテンプレ付きのノートは事務用の殺風景なもの、小学生向きのものしかない。毎日使うには楽しくない。

もやしもんノートだと、なんか楽しくなりそう。

値段も安い

(スクリーンショット 2012-03-06 4.01.22)

これは一個買っておこう。

AA

とりあえず、AA

目的別ノート 旅行

目的別ノート 旅行

気に入ったら踏んでもらえると嬉しいです。

Pitapaクラブにログインして、明細を取得する。

(スクリーンショット 2012-03-02 22.27.28)

Pitapa倶楽部にログインする。

明細CSVと請求料金のTABLEタグを取得する。

require 'rubygems'
require 'mechanize'
require 'kconv'

m = Mechanize.new
##ログインページ
m.get "https://www2.pitapa.com/login.html"
m.page.forms[0].field_with({:name=>"id"}).value = "**i*d_takuya******"
m.page.forms[0].field_with({:type=>"password"}).value = "**password**"
m.page.forms[0].submit
#トップページ
m.page.links.select{|e| e.text =~ /ご利用代金・明細照会/}.first.click
#フォーム
m.page.forms[0] #ご利用代金
m.page.forms[1] #ご利用明細
m.page.forms[2] #TOPページヘ

f = m.page.forms[1]
f.fields.select{|e| e.class.to_s =~ /Select/ }.first
#先月
month = (Time.now()-60*60*24*30*1).strftime('%Y%m')
f.fields.select{|e| e.class.to_s =~ /Select/ }.first.options.select{|e| e.value == month}.first.select
f = m.page.forms[1].submit
##CSVダウンロード
m.page.forms.last.submit
puts m.page.body.to_s.toutf8
##同月の請求額へ
m.history[-2].forms[-3].submit
puts m.page.search('//table[@width=760]').to_s

確定日が翌月14日前後なので毎月20日くらいに実行するといいかも。


PASMOがアレコレ騒がしいいま、ピタパは大丈夫なんだろうか。

なんかアカウントが上書きできるとか。できないとか。どっちにしろPITAPAのICのIDが割れちゃうとまずいよねぇ。

ffmpegを応用する。ファイル転送しながら、エンコード

PT2で録画したデータはATOMでなく、クラウド側でエンコードしたら速いよね。ATOMエンコードすると、時間がかかりすぎるし、電気代大変なので。

サーバーでエンコードする。

cat test.ts | ssh enc_server1 "/usr/local/bin/ffmpeg -i pipe:0 out.mp4 "

はい、楽チン。

これで転送待ち時間がゼロです。転送しながら到着した動画をエンコードするのです。

仕組みの解説。

標準入力をつかったエンコード

cat test.mpeg | /usr/local/bin/ffmpeg -i pipe:0 out.mp4 

これで、FFMPEGが、標準入力のパケットをそのままエンコードして、out.mp4に書き出します。

  • pipe0 :0 が標準入力
  • pipe1 :1 が標準出力
  • pipe2 :2 がエラ出力
  • pipe :- 指定なしは自動判別

です。

ファイル転送

cat test.ts | ssh enc_server1 "cat - > out.ts “

SSHは、標準入力・出力を扱えるので、それをつかって標準入力をそのまま渡します。

無名パイプライン処理に、ffmpegを挟み込む

最後にこれらに、ffmpegをはさみ込めば完成です。

cat test.ts | ssh enc_server1 "/usr/local/bin/ffmpeg -i pipe:0 out.mp4 “

転送待ちして、その後にTSを変換するとか時間無駄だし。そもそもTSってこういう使い方しても大丈夫なトランスポートストリームなんだからね。

転送も、エンコードも同時にするなら

teeをはさみ込めばいいんじゃないかな

cat test.ts | ssh enc_server1 "|tee test.ts | /usr/local/bin/ffmpeg -i pipe:0 out.mp4 “

これでどう?

標準入力が使えるんなら

EPGRECで録画時にそのままmp4で保存できるんじゃないかと思ってるんだけどさ。

ffmpeg のパイプ出力に注意

ffmpeg -i pipe:0 -vcodec libx264 -acodec copy -f mp4 pipe:1

は出来ない。標準出力に出すには、当然TSで有るべきだと思う。
別にTSでなくてもいいんだけど、MP4だと、動画の書き込みのために、ファイルの中身をSEEKで戻ったりする。
なので、Mp4のpipe出力はffmpegに怒られて、動作しないの。パイプだと行きつ戻りつができないので無理だそうだ。

で注意が必要。

ffmpeg -i pipe:0 -vcodec libx264 -acodec copy -f mpegts pipe:1

だと動くかも。

ファイル転送して、そのまま別サーバーにってことも

cat test.ts | ssh enc_server1 "|tee test.ts | /usr/local/bin/ffmpeg -i pipe:0 - (....エンコ設定...)| ssh storage-server " cat - > /path/to/out.mp4"

こんな豪快なことしてLANケーブルを帯域で占拠しても、ストレージ鯖とエンコード鯖で役割分担できますね。Gigabit LAN だから意外とできちゃうからオモシロイ


SSHで標準入力を渡す」は便利

こいうのは便利だと思うわ。そういえば、知り合いがサーバー越しにパイプをするために、わざわざnetcatやら、ポートあけて待受しててたな。
SSH使えよって思います。

SSHでパイプをネットワークで使えるのに、そして名前付きパイプでもいいと思うんだけど。

アクトビラ対応ブラウザにffmpeg で任意の動画を配信する方法。

結論から言います。

アクトビラ対応機器のブラウザで好きな動画が楽しめます。


もうDLNA対応機やREGZA厨と喧嘩しなくていいんですね。朗報

ただし、イバラの道なので初心者にはお勧めしません。うまく動作するテレビやSTBならとても快適です。



今回実験に使ったBuffaloの機器だと余裕でした。

その他メーカの場合は、コーデックが難しい、誰か実験を助けてください。

アクトビラで再生する動画の作り方

ffmpeg -y -i 2355.mp4 -vcodec libx264 -acodec copy test2.m2ts

ポイントは、拡張子 m2ts これが188バイトのヘッダにタイムスタンプを入れた192バイトのヘッダをつけた、タイムスタンプ付きTSを作るための魔法の拡張子。本当はArib仕様を読み解いて作りたいけどね。

アクトビラのブラウザに配信する方法

  1. アクトビラ対応TVにアドレス入力出来る場所にHTMLを置く
    • 今回は 192.168.2.5
  • index.html設置
  1. HTMLが見られることを確認する。
  2. CPCファイルを設置する
    • 今回のキモ
    • CPCファイルが出発点
  3. CPCファイルへのリンクを作る
  4. TVでCPCファイルをクリックする
  5. 動画の再生が始まる。

アクトビラ対応のNetFrontブラウザでHTMLが開けることを確認

(CA3G0443)

CPCファイルを作る。

これが面倒くさい。
とりあえず、それっぽいCPCを作ったのがあるので、おいておきます。
http://qiita.com/items/2925
(CPCファイルの詳しい仕様は、あとで書きます。)

CPCファイルの動画部分にURLを指定

   <startup>
        <content_title>test</content_title>
        <duration>000000</duration>
        <start>http://192.168.2.5/0655_HD.m2ts</start>
    </startup>

ここの部分の動画いm2tsを指定しました。

あとはindex.htmlで

さっき作ったCPCファイルをリンク先に指定します。

<a href="http://192.168.2.5/test.cpc?LID=none&Return=http://192.168.2.5/">0655_HD@atom </a><

と指定します。

LIDは課金用決済のセッションコード、Returnは再生終了後に開くブラウザに渡すアドレス。

アクトビラ・ブラウザを起動して

URLを入力して
(CA3G0444)
(CA3G0445)

クリック
(CA3G0446)

すると再生が始まる。

(CA3G0447)

おおおお!やりましたね。

(CA3G0448)

ニコ動を変換したTSがAQUOSブラウザで再生されました。やったね。

これでテレビのリモコンで動画が見られるようになります。

マウスで操作したりDLNAで探すのは面倒でした。HTMLで表示できるので便利ですね。役得。

AQUOSでもなんとか頑張ってPT2のTSも見れるようになるんです。

さて、こういう仕様は何処で調べるのか。

デジタルテレビ情報化研究会/発行物

個々にかいてあるPDFが置いてありました。PDFを詳細に読み進めればわかるんだけど。如何せん面倒くさい。

CPCファイルについて

CPCファイルについては、デジタルテレビ ネットワーク機能仕様-ストリーミング機能仕様書-プロトコル編(v1.1)
に記述されているんですが。。。。これが結構ややこしい。でもCPCファイルがキモなので必須ですね。

3パートから構成される「CPC」

CPCファイルは3パートから構成されます。

Content-Type:application/X-arib-resourceList
Content-Location:FL-NOENC.eri
Content-Location:RTP.nci

の3パートです。
(スクリーンショット 2012-03-02 5.21.40)

それぞれ役割があって

arib-resourceList
ここにはFL-NOENC.eriとRTP.nciを見に行けと、バイナリで書いてある。(これが面倒でね、、)
FL-NOENC.eri
ここには、動画ファイルのURLとコーデックや長さとかがXMLで 記述されてる
RTP.nci
ここには、ファイルのプロトコルが書いてある(固定)

このほかに、課金情報とかあるらしいんだけど、調べても使ってる人居ないみたい。

形式はHTTPヘッダ形式とかMIME形式とか規格書に書いてある。まぁ、MHTMLやマルチパートのメールと同じです。通常のMIMEです。

CPCの欠点

CPCには"Content-Type:application/X-arib-resourceList"があるんだけど、これがめんどくさい仕様なんですよ。

これが先頭のフォーマット形式

(スクリーンショット 2012-03-02 5.20.20)

先頭パートとには「このCPCは3つのパートからなる」と書いてある。

先頭パートのバイナリ・フォーマットの定義リスト

(Aribによる定義)


つまり、バイナリなんですね。先頭行からちょこちょこ読めばいいんです。でもね、バイナリがBase64されてないので、コピペが激しく難しい。これがアクトビラの解析で一番の罠っぽい感じです。

であとは、Content-Lengthに気をつけながらファイルを書く。

CPCファイルはかなり厳格に読まれる。なぜかというとだ、arib-resourceListがバイナリだから、長さが結構重要みたい。適当に書き換えたら動かない。そのくせタグの中は全く見てなくて、「MPEGだぜESはMPE2だぜ」とCPCに書いてH.264/AVCを送信しても読んじゃいます。


CPCファイルをContent-Lengthにさえ注意して作れば完成です。

CPCファイルさえ作ればあとは簡単よ。

一応AQUOSでもいけることは確認した。タイムスタンプ付きTSを作るだけ。

リモコン操作で簡単動画

epgrecとかだとブラウザ経由で見れるので、正直パソコン触るのが面倒なのでリモコン解決は嬉しい感じ。

大事な事は、アクトビラ対応のテレビにTS直接配信できるということ


ここが重要。しかもHTMLで記述できるからDLNAより楽かも知んない。


*1

早送りとスキップかはどうするの

このエントリのブクマが伸びたらまた続編書きます。そんときにでも。

Buffaloが最強

バッファローSTBが最強でした。
バッファローアクトビラ対応STBはかなり最凶でしたわ。

生産完了になってる。いそげ

ヤフオクで安くで手に入るしいまならいける。


手伝ってください。

CPCファイルの解析は済んだのです、いまはCPCファイルのジェネレーターを作るところです。しかし我が家にはAQUOSしかないので、他メーカのブラウザでも試してみたいんですが。協力してもらえませんか。

アクトビラってクソだよね

アクトビラってガラパゴス化の最たるものだと思うけど。HTMLを意識した標準化を頑張ってる。そのへんか好感が持てる。でも情報リソースが少なくて秘密主義でもっとオープンになってもいいと思う。喧伝が下手だ。

CPCのresource.bin の解析コード

2014-04-06追加。解析コード書いておいた。

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void){
	uint8_t  num_of_resources;
	uint8_t  resourceInfoLength;
	int32_t resourceOffset;
	uint16_t headerLength;
	uint32_t resourceLength;
	uint16_t resourceTypeValue;
	int8_t  resourceNameLength;

	FILE *fp;
	fp = fopen("res.info", "rb");
	if( fp==NULL ){
		printf("fopen Error.\n");
		return 1;
	}

	fread(&num_of_resources, 1 , 1 , fp);
	printf( "num_of_resources = %d \n", num_of_resources);

	for(int i =0;i<num_of_resources;i++){
		
		printf( "{ \n");
		fread(&resourceInfoLength, 1 , 1 , fp);
		fread(&resourceOffset    , 4 , 1 , fp);
		fread(&headerLength      , 2 , 1 , fp);
		fread(&resourceLength    , 4 , 1 , fp);
		fread(&resourceTypeValue , 2 , 1 , fp);
		fread(&resourceNameLength, 1 , 1 , fp);


		printf( "resourceInfoLength = %d \n", resourceInfoLength);
		printf( "resourceOffset     = %d \n", resourceOffset);
		printf( "headerLength       = %d \n", headerLength);
		printf( "resourceLength     = %d \n", resourceLength);
		printf( "resource:TypeValue     = 0x%04x \n", (resourceTypeValue & 0xF000) );
		printf( "resource:SubTypeValue  = 0x%04x \n", (resourceTypeValue & 0x0FFF ));
		printf( "resourceNameLength = %d \n", resourceNameLength);
		printf( "resourceName       = ");
		for(int j=0;j<resourceNameLength;j++){
			printf("%c", fgetc(fp));
		}
		printf("\n");
		printf( "} \n");
	}
	fclose(fp);

	return 0; 


}

2012-05-04追記

ARIB STD-B24 第二編 | デジタル放送におけるデータ放送符号化方式と伝送方式 第2分冊(1/2)
のページ255(PDF的にはp.270)にCPCファイルのヘッダ部分の resourceListに関する記述がある。

*1:ただAQUOSだとなんかH.264/AACの扱いに難がある。時々デコード出来ない場合があった。MPEG2のTSはバッファが短いのか帯域が遅いとブロックノイズだらけになりました。BraviaはTSファイルをなぜか読まない。

PDOのquery/execの違い

PDOのquery/execの違いを忘れていたので、久しぶりに調べてみた。

<?php
        $ret = $this->album_table->exec($CREATE_TABLE_SQL);
        $ret = $this->album_table->query($CREATE_TABLE_SQL);


複数行のクエリを投げるときは、execを使う。

たとえばcreate tableの一括実行など。sqlite:memory:で動作確認した。

queryだと最初の一行だけが実行されただけだった。

exec
複数行まとめて実行
query
一行実行

queryは複数仕込んでも一行だけだった。

phpのPDOのPrepareの課題

prepare では in(:list)とできない 。PHPのPDOでbindParamした時に、INの場合は複数値を配列で渡せない。

PDOStatement::execute() をコールする際には、 文に渡すパラメータにはそれぞれ固有のパラメータマークを設定する必要があります。 ひとつのプリペアドステートメントの中で、同じ名前のパラメータマークを 複数使用することはできません。SQL 文の IN() 句などで、 ひとつのパラメータに複数の値を 割り当てることはできません。


というわけで where in ( :list )

という書き方ができないです。

そこでどうするのか?

<?php
        $SQL = "$SQL where ".implode(' AND ' , $conds);
                  $conds[] = " id in ( ".
                  implode(",", array_map( create_function('$v','return "?";'),$id_list ) ).
                  " ) “;


とやる、これしか無い。配列の中身をまとめてBindするしかないんですよねえ