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に限られますけど。
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に限られますけど。
名刺を配ったり、住所を登録したりするので、氏名と住所はもはや公開情報です。訊いたらわかるし。
以下のような場合、男子の名前だけで、誰かが特定できる状態にあります。
彼の場合、「高校名+男子」の属性情報があれば特定できるわけです。名前は必要ありません。
会社名+給与の金額でも容易に個人が特定できますよね。社長+社員が3名の会社の場合はもう誰がいくらもらってるかバレバレなわけです。
第三者からみても金額が一番少ないのが社長*1、その次が若手か入社年度の浅い人だと想像が容易ですよね。。
名前+住所+電話番号が個人情報と思ってる人が多すぎじゃないでしょうか。
隠さなくていいと言ってるわけではなくて、個人が特定できるレベルって千差万別よね。
乗車履歴が個人情報に当てはまらないと思ってる、まさかそんな人は居ないと思うけど。PiTaPa/PASMOの乗車履歴は、バレてもよさそうな個人情報と思ってるフシがあって、そこが気になった。
交通ICカードの乗車履歴は、リーダーで簡単に見られるから、そんなに神経質にならなくていい、ってのが電鉄各社の本音だろうけど、そもそも簡単に見られる現実が甘いんだよね。サイバネ規格は公開するべきだし、交通ICカードのプログラムはGNUのLGPLに近いライセンスにしてコードを公開させるべきだと思う。
不正なプログラムがレジで情報抜いてないか誰がチェックできるんでしょうか。
乗車履歴と住所、氏名を関連付けて串刺し出来るから個人情報を守らなくちゃいけない。串刺しできないようにしてもいいし、不特定多数に串刺しで検索されないようにしないとダメだよね。
公開情報や個人情報と、別の個人情報を紐付けて、串刺し検索していけるような仕組みはあやういと思う。その場合串刺し検索ができる人と串刺し検索できる人に権限と管理をしっかりさせないとダメだと思うんだ。誰がいつどこで何を串刺し検索したか。その履歴が残ってないと怖いよね。
*1:または一番多い、社長ってあれだからさ一番少ないことも多い
あるブログで見かけました。。サイボウズ利用者の皆さんは公開大好きです。
サイボウズの旧版を放置している会社の社員情報バレバレです。
次のリンクをクリック→サイボウズ ログイン 名前 パスワード filetype:cgi
(スクリーンショット 2012-03-07 21.17.53)
(スクリーンショット 2012-03-07 21.19.03)
(スクリーンショット 2012-03-07 21.19.48)
「◯◯部の◯◯さんお願いします」って言えば簡単にテレアポ営業出来るんじゃないですかね。ってかかれてたけど、全くそのとおりだと思いました。
テレアポさん頑張って。
情報って怖いです、Googleさん怖いです。
(スクリーンショット 2012-03-07 21.18.17)
desknets グループ 氏名 filetype:cgi
Desknetsは何の対策もしてないみたいなのでした。
aipoの営業マンはDesknetsを使用している会社に重点的に弾幕営業をかければいいんじゃないでしょうか。
ソース忘れたけど、サイボウズは対策しているはず。
むしろ2006年のサイボウズをそのまま放置している運営者側に問題があるかも。でもサイボウズを起動させただけで一杯一杯だよねたぶん。
というわけで、サイボウズで会社情報を公開しちゃってどうしていいかわらない。
そんな会社さんからの問い合わせお待ちしておりますよ(笑
見た感じ、desknet'sは何の対策もしてないみたいなので、とりあえず、利用者に通知をするところから始めたらいいんじゃないでしょうか。
Twitter経由で教えてもらいました。サイボウズの脆弱性はこれじゃないかな。
http://jvn.jp/jp/JVN31125599/374951/index.html
っていうか製品の有効期間切れてるからサイボウズは悪くない。放置してる管理者に責任があるんだろうけど・・・WEBアプリって怖いね。
ある日、Twitterを見ていると。「ピタパクラブは上書き登録可能。」と見かけた。
#pitapa 倶楽部がひどいのは、とあるカードに対してユーザー登録が既に行われてても、上書き登録ができてしまうこと。なので、攻撃者が対象者のアカウントを上書きすることが可能になるという凄い実装。
https://twitter.com/#!/cetacea/status/174094663861542912
そうだったの・・・知らなかったです。上書き登録出来るとかヤバイんじゃないの?早速試してみよう。
ピタパを知らない人に解説すると、ピタパは、パスモに先駆けて、関西私鉄で使える交通ICカード。後払いが特徴。あとから回数券分相当が割引されて請求される。とっても便利なサービス。
登録済みPiTaPaに対して、ID乗っ取りが可能です。実際に試しました。
でも悪いことじゃないです。ID再登録はピタパ発行元も推奨する乗っ取り手段です。
以前、ピタパ紛失時にコールセンタで「ピタパクラブはどうすればいいですか?」って訊いたら、再登録できるから大丈夫ですって言われたの。それ思い出した。
悪用しなければいいんです。悪用しなければいいんです。悪用しなければいいんです。
大事なので3回言いました。
ピタパクラブは、パスワード再設定ができません。パスワード紛失時には新規登録で上書きします。
電話番号と生年月日は公開情報だから、PiTaPaカードさえ見れれば誰でも履歴にアクセス可能で、登録情報変更可能ですね。*1
じゃぁピタパの履歴を見るには。ピタパカードを入手して、ってそんな必要ないかもよ。
レシートにフェリカ番号乗るからね、ピタパの支払いレシートがアレば十分。レシートがあればFelicaID入手完成。*2
0027が僕の下四桁です。もう公開情報にしておくわ
利用明細にピタパの番号乗るからね、明細手に入れたら、13桁入手。
(送付される明細にPitapaIDが!)
(マスクされてるけど。)
追記:僕のエメラルドスタシアのPiTaPa会員番号はクレジットカード番号と同じでした。
生年月日・電話番号は公開情報、ピタパ番号(16桁中13桁)が請求書記載、フェリカ番号(下4桁)がレシートに記載。
登録に必要な番号のうち残る番号は、カード有効期限とピタパ会員番号3桁のみ。
その内の、カード有効期限ってのは隠しているうちに入らない。4桁ですが1000通りもありません。
有効期限はつまり60通りです。年はせいぜい5年だから5個、月は12ヶ月だから12個。
ピタパ番号は数字3桁だから1000個。つまり高々60,000通りの総当たり攻撃で登録可能になる。
ピタパクラブには定期的にログインして、アカウントの有効チェックするしかないね。
これが日本の技術力。こういう疑問符が出るシステム作る会社が国民ID関連の会議に入ってるんだろうね。ヤダヤダ
PiTaPa会員番号がクレジットカード番号と同等でした。なのでPASMOと違いPiTaPaは利用者が番号の取扱いが慎重なことを知っている。*3
PASMOの場合、履歴がWEBで見られることを「周知不足」だと指摘されていて、「公開情報」で登録可能な点が問題を大きくしていた。
PiTaPaの場合、履歴がWEBで見られることを「大前提」で履歴収集している。「クレジット番号」で登録必須な点が問題を見えなくしてた。
もちろんIDmは取得可能なんだけど、IDmに個人情報を紐付けるのはちょっと待ってほしい。
うちの妹に相談されたことがある。
鉄道会社ってPiTaPaとかICOCAで入退室出来るんでしょ?あれ、ウチの会社でも使いたいんだよね。 アルバイトが増えてきたから、出退勤管理したいんだけど、新規でカード作るの面倒なんだよね。 金かかるし。嘘の出勤申告防げないし。 定期券のICカードなら、利用履歴あるし、持ってないと出勤できないから丁度いいと思うんだよね。
これ返事に困った。IDは誰も読みだし可能だから、それを使うのはいいかもしれないんだけど、出退勤は個人情報になり得るだろうし。
IDと個人情報を会社が持っちゃうと、下手すりゃその人の行動を全部取れる可能性が出てきちゃうんだよねぇ。
出退勤、入退室、定期券までワンストップで全部やっちゃうと、たしかに便利なんだけど、そういうログをどうするのか。それに思いが至らないのはちょっと困る。下手に情報持ってりゃなんかの時に責任問題になるだろうが。会社と労務でちゃんと情報取扱規定を定めないとダメだよね、出退勤の利用は。っていうか、鉄道会社とサイバネ規格ははIDmを出退勤替わりに使うのをどう見てるの?
なんかすげーFelica関連のソフトウェア増えてるけど、IDmとそのへんのところ詳しく教えてもらえないか?
ちゃんと正規のSDKなの?
かざすとか、その気になれば交通利用履歴を抜けるだろうし。抜いてないって言えるの?
そもそもPitapaで決済以外に会員登録とかにも使われるよね。ああいうのどうなのさ。時々レジでフェリカ・リーダー見かけるけど交通利用履歴抜いてないって何処に証拠あるのさ。
一般利用者はFelicaを交通以外用途に使うことに無駄に慣れている気がする。
会社に定期ICカード使って出退勤してくださいと言われた時に、個人情報を抜くのはヤダ。Noと言ったらクビになるだろうなぁ。
既存のカードに追加で貼るだけ。
http://www.hbs.co.jp/ad_netacs/index.html#merit01
交通系ICカードの履歴読み出しはだれでもできるので便利です。
交通利用履歴は余りに簡単に見れるので、これは個人情報なのか公開情報なのかわけわからなくなってきた。個人情報なんだけど、うっかりさんの電鉄各社とオバカさんなシステム作る会社が公開しちゃった情報だと思うことにしてる。
PASMOから派生してPiTaPa倶楽部の問題点が指摘されてるので、ちょっと考えて見てる。
PiTaPa倶楽部に第三者が登録するのを防ぐため、以下の点は必ず守りましょう
http://www.sonorilo.net/2012/03/02/2852
カード裏面に記載されている会員番号、カードID、有効期限は絶対に秘密にすること
PiTaPa倶楽部には必ず登録し、毎日ログインすること
カードを長期間利用しない場合は解約を検討すること
なんか違う気がする。
Pitapaは匿名で買うことができない。匿名で変えないし、クレジットカード機能すら付いている。
発行時に「住所。氏名、電話番号、勤務先」と身分証を送付する。*1
発行後には、PiTaPa番号(クレジットカード番号)が発行される。
PiTaPaは後払い。履歴を意識する。
利用者は履歴を回収されて当たり前だと思ってる。
履歴が残ってて見られてどう使われるかを、利用者は意識してないと思う。
「記名PASMO」は「再発行」のためだと思ってるんじゃないだろうか。
PiTaPa番号という「通常の第三者に知りえない情報」が提供されていたからだと思う。
*2
クレジットカードでもあるのでレジでも使える。
後払いクレジット故に、利用者の履歴と番号への意識が高かった。
PASMOはFelicaのIDi(黒背景に白抜き文字)を使い、「住所、氏名、年齢、性別」など公開情報とも言える情報を使った。
匿名で手軽に買える利便性を残したため、公開情報だけの記名PASMO、そして匿名利用ゆえに履歴・番号への意識が低かった。
だからこそタイムズなど第三者が、IDiを識別ったIDiと住所と氏名を自社で関連付けてても違和感無く受け入られたんじゃないかな。
利用者のIDへの意識の低さ、鉄道会社の履歴情報へのアクセスについての周知の低さが透けて見える。
基本的にはPASMOと同じです。だけど、Pitapaには番号が一つ多い。
PiTaPaの場合、クレジットカード番号を付与していたことで立ち位置がちょっと違ってた。
つまり「カード番号を盗まれたときは、すぐに再発行してください」
PiTaPaはクレジットカード番号(PiTaPa会員番号)を追加発行しているので、これを安易に盗まれるのはユーザーの責任といえるだろう。
サイバーノーガードというよりクレジットカード番号のアクセスと同等と考えられているのでしょうね。
サイバーノーガード戦法というより、上書き登録出来てしまうことが問題だと思う。
IDiやクレジットカードが漏れるのは仕方ないことだとしても。
第三者が本人に知られることなく上書き登録しちゃえるのは、問題だと思う。。。
男子高校生いや中学生か。円グラフをパイチャート呼んだり、円周率πが2πで360度で、2πが一個で妙に納得したり。1/6 πとか美乳ですよね。とか。積分のデルタが密林でΔだとか。数学とか楽しめます。
見たくてたまらない君たちに、とりあえず、飽きるまで見ることをおすすめする。飽きたら、現実を見ような。いろいろな意味で。
Macなら初めから入ってるよ。Macを買ったきみはついてる。
Windowsな君は。http://www.ruby-lang.org/en/downloads/ からダウンロードしてインストール。
rubyが実行できるようになると、いよいよ、プログラミングで魔法の時間だ。
ruby 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 }
これでおっぱいがいっぱい。
うむ。それでは一気にダウンロード。
一本ずつダウンロードを待ってられないのが男子中学生。
複数スレッドでのダウンロードのプログラムを参考に書いておきます。
*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
http://d.hatena.ne.jp/heavenshell/20120304/1330869594
http://yusukebe.com/archives/20120229/072808.html
他の蒐集も、基本は同じです。検索先がBing→ニコニコになったり、取得対象がJPG→FLVになるだけです。がんばってね。
初めてのプログラミング をかいなさい。
何気なくAmazon見ていたら「もやし」のノートを見つけた。しかも中身が実用的
やばい。これは可愛い。
(旅行)
(家計簿)
(自由帳)
テキストエディタでファイルを書き散らかすと、印象に残らない。ノートだと書いたものを検索しにくい。
僕は、記憶に残るほうが大事だと思う。だから未だにアナログなノートが好きだ。
Evernoteは検索も、デジカメ写真とコメントが残せるのがとても便利だ。でもインデックスが悪い。
ノートを書くときにインデックスも手書きする。すると、前後の関係がよく分かるようになる。インデックスは一種のファイル名みたいなものです。
あと、ノートはフォーマットを決めておくといい。白紙の日記とか何を書いていいか迷走する。
だからこのようなテンプレのノートが便利なんだ。
でもテンプレ付きのノートは事務用の殺風景なもの、小学生向きのものしかない。毎日使うには楽しくない。
もやしもんノートだと、なんか楽しくなりそう。
(スクリーンショット 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が割れちゃうとまずいよねぇ。
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に書き出します。
です。
最後にこれらに、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 -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 だから意外とできちゃうからオモシロイ
結論から言います。
アクトビラ対応機器のブラウザで好きな動画が楽しめます。
もうDLNA対応機やREGZA厨と喧嘩しなくていいんですね。朗報
ただし、イバラの道なので初心者にはお勧めしません。うまく動作するテレビやSTBならとても快適です。
今回実験に使ったBuffaloの機器だと余裕でした。
その他メーカの場合は、コーデックが難しい、誰か実験を助けてください。
ffmpeg -y -i 2355.mp4 -vcodec libx264 -acodec copy test2.m2ts
ポイントは、拡張子 m2ts これが188バイトのヘッダにタイムスタンプを入れた192バイトのヘッダをつけた、タイムスタンプ付きTSを作るための魔法の拡張子。本当はArib仕様を読み解いて作りたいけどね。
これが面倒くさい。
とりあえず、それっぽいCPCを作ったのがあるので、おいておきます。
http://qiita.com/items/2925
(CPCファイルの詳しい仕様は、あとで書きます。)
<startup> <content_title>test</content_title> <duration>000000</duration> <start>http://192.168.2.5/0655_HD.m2ts</start> </startup>
ここの部分の動画いm2tsを指定しました。
さっき作ったCPCファイルをリンク先に指定します。
<a href="http://192.168.2.5/test.cpc?LID=none&Return=http://192.168.2.5/">0655_HD@atom </a><
と指定します。
LIDは課金用決済のセッションコード、Returnは再生終了後に開くブラウザに渡すアドレス。
マウスで操作したりDLNAで探すのは面倒でした。HTMLで表示できるので便利ですね。役得。
AQUOSでもなんとか頑張ってPT2のTSも見れるようになるんです。
CPCファイルについては、デジタルテレビ ネットワーク機能仕様-ストリーミング機能仕様書-プロトコル編(v1.1)
に記述されているんですが。。。。これが結構ややこしい。でも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)
それぞれ役割があって
このほかに、課金情報とかあるらしいんだけど、調べても使ってる人居ないみたい。
形式はHTTPヘッダ形式とかMIME形式とか規格書に書いてある。まぁ、MHTMLやマルチパートのメールと同じです。通常のMIMEです。
CPCには"Content-Type:application/X-arib-resourceList"があるんだけど、これがめんどくさい仕様なんですよ。
(スクリーンショット 2012-03-02 5.20.20)
先頭パートのバイナリ・フォーマットの定義リスト
(Aribによる定義)
つまり、バイナリなんですね。先頭行からちょこちょこ読めばいいんです。でもね、バイナリがBase64されてないので、コピペが激しく難しい。これがアクトビラの解析で一番の罠っぽい感じです。
CPCファイルはかなり厳格に読まれる。なぜかというとだ、arib-resourceListがバイナリだから、長さが結構重要みたい。適当に書き換えたら動かない。そのくせタグの中は全く見てなくて、「MPEGだぜESはMPE2だぜ」とCPCに書いてH.264/AVCを送信しても読んじゃいます。
CPCファイルをContent-Lengthにさえ注意して作れば完成です。
一応AQUOSでもいけることは確認した。タイムスタンプ付きTSを作るだけ。
epgrecとかだとブラウザ経由で見れるので、正直パソコン触るのが面倒なのでリモコン解決は嬉しい感じ。
大事な事は、アクトビラ対応のテレビにTS直接配信できるということ
ここが重要。しかもHTMLで記述できるからDLNAより楽かも知んない。
このエントリのブクマが伸びたらまた続編書きます。そんときにでも。
CPCファイルの解析は済んだのです、いまはCPCファイルのジェネレーターを作るところです。しかし我が家にはAQUOSしかないので、他メーカのブラウザでも試してみたいんですが。協力してもらえませんか。
アクトビラってガラパゴス化の最たるものだと思うけど。HTMLを意識した標準化を頑張ってる。そのへんか好感が持てる。でも情報リソースが少なくて秘密主義でもっとオープンになってもいいと思う。喧伝が下手だ。
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; }
ARIB STD-B24 第二編 | デジタル放送におけるデータ放送符号化方式と伝送方式 第2分冊(1/2)
のページ255(PDF的にはp.270)にCPCファイルのヘッダ部分の resourceListに関する記述がある。
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だと最初の一行だけが実行されただけだった。
queryは複数仕込んでも一行だけだった。
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するしかないんですよねえ