書き殴り雑記
2009/05/09
状況は
7回
裏、
0対
0、
ノーアウト
満塁。
この試合最大の山場である。
ピッチャーの奮闘と相手打線の拙攻によりアウトを2つ奪取する功を成す。
状況は
7回
裏、
0対
0、
2アウト
満塁。
こちらのチームのピンチには変わりないが、状況は幾らか改善した。
相手はピッチャーの打順。当然代打が宣言される。
嫌な予感が過ぎる。
必死の抵抗を続けて後一歩という所まで達する。だが、その”後一歩”が届かずに全てが無と化す。
よく見てきた情景だ。
逆に、見事”後一歩”を踏み出し全てを得る。
こちらもよく見てきた情景だ。
つまり…大人しく正座でもして、経過を見守るしかないって事だ。
『打者、”ピッチャー”に変えまして”首位打者経験者”〜』
相手チームの代打を告げるアナウンスがテレビから流れる。
続けて、解説者の声が流れる。
ちなみにこの解説者はこちらのチームのOBである。
「これで、このピンチは抑えました」
素人である俺にはその意味を理解する事はできない。
「この代打はこちらのチームにとっては有利ですよ」
「代打が出されずに、ピッチャーにそのまま打席に立たれる方が嫌でした」
素人である俺にはその意図を理解する事はできない。
「ピッチャーにそのまま打席に立たれると緊張感が緩んで手痛い間違いが起きる」
「代打が出される事で緊張感が持続するのでこのピンチは抑えられる」
素人である俺にはその思考を理解する事はできない。
だが、俺は、俺が発した言葉によって、この解説者を否定している事を、理解した。
「ちょ、おま、何凄絶な”フラグ”起てをしてやがる!!」
咄嗟にテレビの音声を消していた。
意味は無い。判っている。ただ、怖かったんだ…。
神の存在など信じていない。簡単に否定できる。
でも…俺は”フラグ”という魔物の存在は否定できずに居る。
彼奴は在る。彼奴を起たしてはダメなんだ。
テレビでは音声を発しないまま映像が流れ続けている。
状況は
7回
裏、
0対
3、
2アウト
2塁。
こちらのチームのピンチは変わりないが、状況は見事に悪化していた。
:
こうなる事は判っていたから悔しくないモン!バー鹿
P.S.試合は0対4で負けました。”フラグ”様を起たせてしまったんだから必然の結果だよ…
2009/03/09
もう4日?程デイリーランキング 1 位が続いている…マイリス数がエライ勢いで増えてる。
何時までこの記録が続くのか生暖かく見守ろう…
って、まぁクマ─!!は良いとして、やっぱニコニコの新規ユーザ数って爆増しているんだ。と↑で思った。
エコノミーモード時間拡大のお知らせ を見た時
『プレミアムとの差別化のためにエコノミーのサービスを劣化させやがった!!』
とか勘繰ったりもしたのだけど、マジでユーザ数が増えすぎてキャパ的に厳しそう。
かといって、赤字のニコニコに設備増強を求めるのも酷だろうし…
この先ニコニコは持つのだろうか…
10分/日 程度の利用頻度とはいえ、それなりに楽しませて貰ってるので頑張って欲しい。
プレミアム会員@月525円というのは安いとは思うのだが、働いている身からすると範囲が広すぎる気がする。
日曜のみプレミアム会員@3ヶ月525円みたいなサービスがあれば良いのだがなぁ
2009/02/05
さっきまで、飯を食いながらネットを巡っていた。
melt日記
色々巡って此処に着いた。
http://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%B4%E3%82%BD%E3%83%BC%E3%83%88
さらに流れて此処に着いた。
コーヒー噴いた。
実際に噴いた。
今、大変な事態になっている。
モニタに向けて噴いたならまだ救いがある。
…
キーボードに向かって噴いた。
ホント、大変な事態になっている。
さっさとキーボードを洗うなりしなきゃならない。
なのに、こんな雑記を書いている。
キーボードを叩くと水音がする。
なのに、こんな雑記を書いている。
キーボードに触れると指先がベトベトする。
なのに、こんな雑記を書いている。
多分、”High”になっている。キまっている。
今なら AGK 以上のパフォーマンスを披露できる。
……
言葉を間違っていた。訂正する。
多分、”自棄”になっている。キーボードを窓から投げ捨てたい。
だけど、
不思議と、この結末を悔いてはいない。
それは、完全に敗られたから。
中途半端ではなく、完璧に噴いたから。
ボゴソート
お前の名は今生覚えておく。
2009/01/18
『たまに書くならこんな御はなし』
『ゲームセンターCX』という番組があります。
ファミコン、スーファミといった懐かしきハードで出されたレトロゲームのエンディングを観るために、
よゐこの有野晋也が部屋に缶詰状態でゲームクリアするまで奮闘する、
という内容がメインの番組です。
というのは、まぁ、現在の話であって、
番組初期は少し内容が違い、ゲーム開発関係者にインタビューして話しを聞くという事がメインの番組でした。
広井王子という人がいます。
『天外魔境』や『サクラ大戦』シリーズをプロデュースした人です。
この人が初期の
『ゲームセンターCX』内でインタビューを受けた時のやり取りが
自分にとって印象深く残っているのでちょっと紹介します。
昔の事でモロうろ覚えなので細部の再現率は全く期待しないように。
大まかな流れのみ感じてください。
「ゲーム中の1シーンで、雪降る中をキャラを歩かせる場面があったんですよ。」
「で、その時『ここでキャラをコケさせたら面白い』と思ったんですよ。」
「だから『ちょっとそこでキャラをコケさせて』ってプログラマの人に頼んだら何て言ったと思います?」
「『そんな事しても意味無い』って言ってやってくれないんですよ。」
「いや。演出ですよ演出。なのに『意味無い』って拒否すんですよ(笑)」
「その時はあの人達ちょっとおかしい、と思いましたね(笑)」
広井氏の発言(ウロ覚え)より
という感じのやり取りだったハズ。
これ観た時ちょっと衝撃を受けました。
何故なら、自分も
『そんな事しても意味無い』 と返してしまいそうだったから。
この話の中で
『意味無い』 と返答したプログラマ側の思考を想像してみましょう。
雪降る中、キャラを歩かせるシーンは既にプログラム的には完成している。
+
『コケさせて』 → 完成しているプログラムに手を加える事になる。
+
『コケさせる』 という事自体に大した意味が認められない。
↓
メリット・デメリットを考えると却下だ。そんな無駄な事でプログラム変更するなんてアホ。
ってトコでしょうか。というかコレ俺の思考か…
基本的に、プログラムをする時は
”最終的にこんなモノを組む”と見据えた上で設計を行います。
そして設計完了後、それに沿ってプログラムを組んでいきます。
このようにすれば
”最終的にこんなモノ”に対して最適化されたプログラムを組む事ができます。
ただ、途中で変更が入ると
”最適化”部分に大なり小なりの劣化が起こる可能性があります。
つまり、プログラマが
”完璧”に仕上げていたハズのプログラムが
”汚く”なるのです。
その
”汚く”なる事を許容するためには、
”途中で変更”に納得できる
”何か”が要るのです。
その
”何か”が在った場合、プログラマは嬉々?として変更に従い、無い場合は難癖つけて変更を渋ります。
今回の話の場合、
『キャラをコケさせる』 事を
「広井の野郎、恣意的な事言うな。そんなモンでプログラムを汚せるか!」
とでも(俺が勝手に想像した)プログラマは判断したのでしょう。
ですが、常識的に考えてゲーム開発という場においてはこの考えは間違っていますね。
機能美を求めるようなアプリケーションならまだしも、ゲームで求められるのは楽しませる事。
ならば圧倒的に(専門家である)ディレクター・演出家等の意見が強くあるべきです。
「プログラム的にデメリット高いから、そんな演出省きましょう。」
ってワケにはいきません。赤字上等のクソゲー作りたいならともかく。
仕事において納得できない仕様変更(明らかに改悪と思う等)を要求された場合、どうします?
自分は、その変更を取り下げさせる方向に話を進めるような事を確信犯的にしていました。
でも、このインタビューを観た後では少し考えを変えました。
自分の意見を(客観的/偏っていない立位置から)伝えた上で、それでも顧客がそう判断するならば受け入れよう、と。
※まぁ、程度にもよりますが
という事で、”たかがゲーム番組といっても侮れない”という御話でした。
2008/12/28
閑話続題
- Introduction 『用語』
- 「閑話」
「今回は無駄話でもしてみます」 というフリに対して
「閑話以外を扱ったことがあるのか?」 と返されると応えに窮するもの。
- 「ダイレクトメール」
個人情報が記載された郵送物を受取人の承諾無く送りつける嫌がらせ行為。
発見次第廃棄すべき害物。だが、個人情報が記されているため手軽に廃棄し辛く、廃棄が後回しになる。
そして、大掃除の時等にヒィヒィ言いながら比良すら破り捨てる作業のために時間を浪費してしまうもの。
- 「日本ユニセフ」
国際連合児童基金(ユニセフ)の日本支部…
では無いのだが、日本ユニセフへ集められた寄付金から 25 億円を投じて建てたビルを都内一等地に有し、ユニセフの日本における窓口として活動している財団法人。
- Chapter 1 『寄付依頼』
1月程前、日本ユニセフから寄付を嘆願するダイレクトメールが届く。
俺の寄付によって貧困に喘ぐ子供達を助ける事ができるらしい。
…だが、余剰金は親類の会社運転資金と相殺されていく運命にある俺にはそんな余裕は無い。
忸怩たる思いではあるが、期待に応える事は困難だ…
- Chapter 2 『個人情報』
ダイレクトメールから個人情報が記載部分を破棄する作業に取り掛かる。



個人情報の雨嵐に見舞われる。
破り捨てるのを諦め、焼き尽そうとも考る。
だが、室内でそんな行動に及んでスプリンクラー大ハッスルなんて状況になったら笑えない。
もちろんシュレッダーなんて無いので、ヒィヒィ言いながらも手作業で破り捨てる事態となる。
- Chapter 3 『住所』
俺は、一見さん、若しくは信用が無い相手に住所を提示する場合、簡略化した記載をする。
具体例を挙げると
「○丁目◇番地□□□ △△マンション ▽▽▽号」
と記載すべきトコを
「○-◇-□□□-▽▽▽」
という感じにである。何となく気分でこうしている。
※ この記載でも正確に宅配物を届けてくれる運送関係者方には謝辞御礼
- Chapter 4 『宛て名』
日本ユニセフから届いたダイレクトメールの宛先

「○-◇-□□□-▽▽▽」となっている。
何処かの低脳が流出させた個人情報を名簿業者から購入したのだろう。
- Chapter 5 『信用』
>日本ユニセフ様
現在はダイレクトメールによって効果が上がっているとの事だが、他の方法は無いものか?
- 業者から個人情報を買い取るために、寄付金から運用されるお金
- ダイレクトメールを作成・送信するために、寄付金から運用されるお金
- ダイレクトメールという手法が生み出す”ユニセフ”への悪印象
自ら(というより親的存在であるUNICEF)の身(信用)を削って対価を得ているのでは?
と危惧してしまう。
- Chapter 6 『結』
個人情報が載ったダイレクトメールは止めて!破棄するのがメンドイの…
2008/10/12
低い位置に脳がある者?
久々に真性の低脳をみた。
EventLog.GetEventLogsで取得した Entries の Message(説明)変換で失敗する
だが、現在のスレッドを見ただけではどれくらい低脳な猿が出現したのかを完璧に把握する事はできない。
何故ならば、低脳者が持つ低脳な思考回路故に実行可能な低脳な行動、
”他人のレスの付いた投稿記事を削除”
によって低脳者が投稿した全ての内容は既に削除されているからである。
基本的に、このような技術系のBBSで投稿される質問、それに対する回答はデータベースに蓄積されていく。
これより後、同じ問題に出合った人がいた場合、わざわざ質問を投稿せずともデータベースの情報を参照すれば情報を得られるようにするためだ。
しかし…この低脳者がしたように、”己にとって用済み”となった途端、投稿内容を削除するような低脳行動を起こされてはこのスレッドの情報価値は大激減する。
後から見た人は、どういう点が問題になっていて、その問題に対してどのような情報交換が為されたのかを把握できなくなるからだ。
BBS(性質上特に情報交換系)で投稿する者は理解しておかなければいけない。
『スレッドは使い捨てるものではない。そのスレッドが持っている情報価値に関わらず投稿内容はデータベースに蓄積され後世に伝えられる。』
という事を。(例外は存る)
回答者に依って情報価値が齎されていたにも関わらず、低脳者一人に依って価値が破壊されたこのスレッドは無残である。
が、それでも後世に残っていってしまう。
:
と、投稿を削除した低脳者への批難をつらつらと書いてきたが、実は本題はコレじゃない。
実際、投稿した内容を削除する質問者はごまんと居る。この程度で”真性の低脳”呼ばわりはしない。
低脳者が削除した内容(の雰囲気)を覚えている範囲で簡単に再現してみる。
まず最初の投稿。
全く問題なかった。丁寧な文章で、質問を解決に導くに当たって最低限必要な情報も示されていた。
2回目の投稿。
「何コイツ…」という印象を持たされた。
低脳者の質問投稿から(回答者が)推測できた情報を回答者の人が示した。そして参考ページへのリンクを示した。
それに対して低脳者はこういう感じに反応した。(現在は削除済)
「私は”.NET Framework 2.0 でやりたい”のですが。」(2.0 の部分はうろ覚えで自信無し…)
※.NET Framework 2.0 でやりたい という部分をわざわざ ””(ダブルクォーテーション)で括ったのは俺では無い。低脳者だ。
回答者が示した情報、参考ページは WINAPI を用いてのもだった。それがダメだったのだろうか?
ともかく、俺ならこの時点でサヨナラだ。
上の一文だけでは伝えきれていないだろうけど、文章全体からも低脳者の慇懃無礼さが滲み出していた。
3回目の投稿。
この回答者は低脳者を見捨てなかった。低脳者の人格エラーを指摘する事も無く紳士に回答を続けた。
それに対して低脳者はこういう感じで返した。(現在は削除済)
「だから、私は”.NET Framework 2.0 でやりたい”のです。関係ない内容を書くならブログなり何なりで書いたらどうです?
(MSに関係の無い一般人でなく)マイクロソフトの人が回答してくれませんか。」
※()内は俺が付けた注釈。そして、信じ難いかもしれんがこの文はマジで脚色していない。親切丁寧な回答に対して「ブログで書け。おまえはお呼びで無い!」と吐き捨てた。
回答者は(親切心で) .NET Framework 3.5 で追加された機能を紹介したのだろうが、その思い、低脳者には届かなかったようだ。
感謝の言葉どころか批難の罵声が返ってきた…
そして1つの事実が明らかになった。
”この低脳者、情報交換の場であるフォーラムをサポートセンターと勘違いしてやがる”
典型的な痛い奴、スルー推奨対象者である。
その後、別の人からの回答が 2 つ付いた後に低脳者は己の投稿内容を削除した。
問題が解決したからなのか、与えられた情報を己で処理できず諦めたのかは分からない。
スレッドを統括する事も無く(逆に、最後に破壊して)低脳者が去ったからだ。
確かなのは、ゴミスレ(タイトルと回答内容から情報を得る事はできるケド)がデータベースに蓄積されるという事。
そして、他人(少なくとも俺)に不快?な思いをさせたという事だ。
わざわざ時間を掛けてこんな雑記を書かせ、公開させてしまう程に…
2008/09/28
PC壊れて自作して 2008夏
この夏 PC を新調しました。積極的な動機からではなかったんですけどね…
8/1(金)
PC を立ち上げて十数分後、いきなり PC の電源が落ちた。そして BIOS が立ち上がらなくなった。PC のコンセントを PC 終了毎に抜いてたから M/B の CMOS 電池が切れた。とかそんな感じでは無く、BIOS が立ち上がろうとしている気配が無い。
「明日から連休!」と気を良くしていたトコロにこの仕打ち。何かもうアレな気分になったのでこの日は寝た。
8/2(土)
昼過ぎに起きてから色々調査した結果、CPU or M/B のハードウェア故障の可能性がかなり高い事が判明。
ちなみに当初は電源を一番疑っていた(気温が下がる冬時は電源をコンセントに繋いでから数十分待たないと PC の電源が着かない。という前フリがあったので…)のだが、確認のため 2500 円の電源を買ってきて交換してみたが症状は改善しなかった。つまり電源は関係無し。2500 円とはいえ無駄金出費は悔やまれる。
という事で、PC と共にネット接続環境も失った俺は早急に対策を執る必要があり即時新 PC の購入を決意した。
AGP スロットしかない M/B にも嫌気が差していたし丁度良い。
8/3(日)
前回のようにパーツを吟味して自作 PC を組み上げる時間も気力も無かった俺は BTO PC を購入する事にした。
その日の夜。
ネット環境を失っていた俺は友人宅に突撃し FEZ をしていた彼奴から PC を強奪。
take oneのサイトに繋ぎ BTO マシンの見積もりを済ませた。ついでにデスクトップの壁紙をフランドール・スカーレットからドナルドに替えてやったらアイアンクローを咬まされた……善意の親切心から行なわれた行動に対してこのような応じ方をする奴は人としてどうかと思う。
見積もり結果
| M/B | ASUS P5Q |
| CPU | Core2Duo E8500 3.16GHz |
| CPUファン | SAMURAI MASTER |
| メモリ | UMAX PC6400 DDR2 DDR800 1GBx2 |
| HDD | HITACHI SATA 500GB |
| ビデオ | Leadtek PX9600GT ZL |
| 電源 | Seasonic S12 ENERGY+SS550HT |
全部で税、送料込み 95000 円強だった。(足りないパーツは旧マシンから取ってくる)
※ 見積もり時「筐体無し」って選べたから選んだけど、筐体無しの BTO マシンってどうなるんだろう。一度店側で組み立てて動作確認した後、再度バラして送ってくれるのだろうか?(でもこれって BTO マシンって言うの?)
そして、いざこの見積もりで発注しようとした時、ふと
5 年前の事を思い出した。
8 月上旬。
真っ当な会社に勤めている者ならば 6, 7 月に出たボーナスで懐がまだ暖かい時期。
直後に盆・夏期休暇を控え、様々な事が集中する時期。
新 PC をゲットしようとする(俺の様な)輩が大量に発生し、その結果大混乱が起きるという事も十分ありえる。
前回この時期に通販を利用した結果、全てのパーツが揃うのに 1 ヶ月近くの日数を要した。同じ轍を踏むワケにはいかない。
尚、ちょうどこの頃
フェイスで祭りが発生中だった。どうみても CPU の価格設定ミス(ボーナス期間だったのでミスではなかったのかもしれないが、それほどのアリエナイ価格設定)で買えば(言葉通り)得するという超激安 BTO PC が売り出されていたようだ。俺は 8/4 に気付いたのだが時既に遅し。普通の値段設定に戻っていた…
8/4(月)
結局通販の利用は却下で完全自作決定。大阪日本橋に繰り出して同じパーツを揃えた。
全てのパーツ合わせて約 85000 円。通販使うより 10000 円程浮いた。
ただ、作業手間・保証等を考えるとテイクワンで注文していたとしても損ではない。各パーツの情報も見積もり段階できちんと表に出している(目に見えない部分で腐れ低品質パーツを使い金を毟るような事はして無いポイ)し価格も納得できる。悪くない店だ。
8/5(火)
昨日は電車代をケチって地下鉄
難波-
動物園前駅間を(買ったパーツを持って)歩いたので疲れて何もしなかった。
今日から PC の組立て開始だ。
Start...
…PC 組みあがった。
…BIOS が立ち上がった。
…OS のインストールも終わった。
何もかもアッサリ行き過ぎて少し拍子抜け。やっぱ前回が特別だったんだな。
最終的にこうなった。
| M/B | ASUS P5Q |
| CPU | Core2Duo E8500 3.16GHz |
| CPUファン | SAMURAI MASTER |
| メモリ | UMAX PC6400 DDR2 DDR800 1GBx2 |
| HDD | HITACHI SATA 500GB |
| HDD | HITACHI SATA 320GB(使い回し) |
| HDD | HITACHI IDE 120GB(使い回し) |
| ビデオ | Leadtek PX9600GT ZL |
| サウンド | M/B On Board |
| DVD-RW | LG GSA-4082B(使い回し) |
| FDD | バルク(使い回し) |
| 電源 | Seasonic S12 ENERGY+SS550HT |
| 筐体 | MT-PRO1450 Solidline MaxFlow(使い回し) |
今回はほとんど調査する事無くパーツを買ったので仕方ないけれど ASUS P5Q のレイアウトがちょっと気に入らない。

ATX24pin電源コネクタの位置が CPU ソケットと PCI-Express(x16)スロットの中間にあって隙間を縫う様に配線しなければいけない。ホント何でこんな位置に配したの?って言いたい。
後、CD-IN コネクタ。なんでそんな左下にあるの。遠いよ。届かねぇよ。光学ドライブからそんなトコまでケーブル届かなかったよ!!
も一つ。IDE スロットが 1 つというのも後に悪い方に効いてくるかもしれない。PCI-Express(x1)スロットを 2 つ付ける位なら IDE スロットを 2 つ用意するべきだ俺的jk。
8/6(水)
8/7(木)
Service Pack 当てたり色々環境整えたり。
8/8(金)
PC 完全復活。
という一週間でした。
ネット接続環境が無くなったのは結構辛かった。自宅でやる事が一気に無くなる。
2008/09/14
『APNGを探究しよー! 8』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
”Firefox3 が出る” + 「
APNG をネタにすれば雑記を更新できそうだ」という思い付きで始めた連載もとうとう最終回を迎えました。
ラストは”アニメーション”です。
Animated PNG はアニメーションしなけりゃ意味がありません。
「動かねえ
APNG は、ただの
PNG だ。」
と人語を解する豚もこう云っていた気もしますし早速動かしてやりましょう。
Visual C++
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;
#include <cassert>
#include <windows.h>
#pragma comment(lib, "winmm.lib") // for timeGetTime()
#include "apng.h"
#pragma comment(lib, "apng.lib")
static void dib_blt(const BITMAPINFOHEADER* dst_h, unsigned char* dst_bits, int dst_x, int dst_y, int width, int height, const BITMAPINFOHEADER* src_h, const unsigned char* src_bits, int src_x, int src_y, bool blend);
static void alphablend(HDC dst, int x, int y, int width, int height, HDC src, int src_x, int src_y, bool blend);
static void dib_fill(const BITMAPINFOHEADER* dst_h, unsigned char* dst_bits, unsigned int dst_x, unsigned int dst_y, unsigned int width, unsigned int height, COLORREF color) {
assert(dst_h->biBitCount == 24 || dst_h->biBitCount == 32);
assert(dst_h->biHeight >= 0);
assert(dst_x + width <= dst_h->biWidth && dst_y + height <= dst_h->biHeight);
// 4 byte 境界を考慮して 1 ライン辺りの byte 数を求める
const int rowbytes = ((dst_h->biBitCount * dst_h->biWidth + 31) >> 5) << 2;
// byte per pixel を求める
const int pixelbytes = dst_h->biBitCount >> 3;
// (dst_x, dst_y + height - 1) 位置へ移動
dst_bits += rowbytes * (dst_h->biHeight - (dst_y + height)) + pixelbytes * dst_x;
// 1st ラインを指定色で fill
const unsigned char bgra[4] = { GetBValue(color), GetGValue(color), GetRValue(color), unsigned char((color >> 24) & 0xff) };
for (unsigned int x=0; x < width; ++x) {
memcpy(&dst_bits[pixelbytes * x], bgra, pixelbytes);
}
// 1st ラインのデータを 2nd ライン以降にコピー
const int copybytes = pixelbytes * width;
for (unsigned int y=1; y < height; ++y) {
memcpy(&dst_bits[rowbytes * y], dst_bits, copybytes);
}
}
int wmain(int argc, wchar_t* argv[]) {
if (argc != 2) {
return 0;
}
// APNG をメモリ上に load
ifstream fs(argv[1], ios_base::in | ios_base::binary);
vector<char> apng((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
fs.close();
// APNG のヘッダ情報取得
apng_HEADER h;
apng_get_header(&apng[0], apng.size(), &h);
const bool alpha = ((h.color_type_ & apng_COLOR_MASK_ALPHA) || (h.valid_flags_ & apng_VALID_tRNS));
// APNG仕様書 で云う "output buffer" 確保
BITMAPINFOHEADER output_h = { 0 };
output_h.biSize = sizeof(output_h);
output_h.biWidth = h.width_;
output_h.biHeight = h.height_;
output_h.biPlanes = 1;
output_h.biBitCount = (alpha ? 32 : 24);
output_h.biSizeImage = (((output_h.biBitCount * output_h.biWidth + 31) >> 5) << 2) * output_h.biHeight;
unsigned char* output_bits;
HBITMAP output = ::CreateDIBSection(NULL, reinterpret_cast<BITMAPINFO*>(&output_h), DIB_RGB_COLORS, reinterpret_cast<void**>(&output_bits), NULL, 0);
HDC pdc = ::GetDC(NULL);
HDC dc = ::CreateCompatibleDC(pdc);
HGDIOBJ oldbmp = ::SelectObject(dc, output);
enum {
APNG_DISPOSE_OP_NONE = 0,
APNG_DISPOSE_OP_BACKGROUND,
APNG_DISPOSE_OP_PREVIOUS,
APNG_BLEND_OP_SOURCE = 0,
APNG_BLEND_OP_OVER
};
// APNG仕様書 で云う "Fully transparent black" 定義
const COLORREF fully_transparent_black = 0x00000000;
// output_buffer をクリア
dib_fill(&output_h, output_bits, 0, 0, output_h.biWidth, output_h.biHeight, fully_transparent_black);
std::vector<unsigned char> dib;
std::vector<unsigned char> backup(output_h.biSizeImage);
unsigned int cur_time = ::timeGetTime();
for (unsigned int i=0; i < h.num_frames_; ++i) {
dib.resize(apng_get_frame(&apng[0], apng.size(), i, NULL, 0, NULL));
apng_FRAME f;
apng_get_frame(&apng[0], apng.size(), i, &dib[0], dib.size(), &f);
if (f.dispose_op_ == APNG_DISPOSE_OP_PREVIOUS) {
memcpy(&backup[0], output_bits, output_h.biSizeImage);
}
BITMAPINFOHEADER* frame_h = reinterpret_cast<BITMAPINFOHEADER*>(&dib[0]);
dib_blt(&output_h, output_bits, f.x_offset_, f.y_offset_, f.width_, f.height_, frame_h, &dib[0] + frame_h->biSize, 0, 0, (alpha && f.blend_op_ == APNG_BLEND_OP_OVER && i > 0));
::InvalidateRect(NULL, NULL, TRUE);
alphablend(pdc, 100, 100, h.width_, h.height_, dc, 0, 0, alpha);
switch (f.dispose_op_) {
case APNG_DISPOSE_OP_BACKGROUND:
// 今回フレーム合成した領域を”完全透過な黒”で塗潰し
dib_fill(&output_h, output_bits, f.x_offset_, f.y_offset_, f.width_, f.height_, fully_transparent_black);
break;
case APNG_DISPOSE_OP_PREVIOUS:
// 描画前の状態に戻す
memcpy(output_bits, &backup[0], output_h.biSizeImage);
break;
}
const int adjust = ::timeGetTime() - time;
::Sleep(::MulDiv(f.delay_num_, 1000, (f.delay_den_ == 0 ? 100 : f.delay_den_)) - adjust);
time = ::timeGetTime();
}
::SelectObject(dc, oldbmp);
::DeleteDC(dc);
::ReleaseDC(NULL, pdc);
::DeleteObject(output);
return 0;
}
動かすとこんなイメージになります。時計の秒針が一周した後に止まります。

サンプルの
APNG ファイルは Justin Dolske 氏が公開している
clock-opt.png を借りてます。
ちなみに、この clock-opt.png は”最適化されたAPNG”です。

こんなカンジのフレームで構成されています。
apngediterに読み込んでみると構成が判りやすいかも。
以下解説。
static void dib_blt(...);
static void alphablend(...);
『APNGを探究しよー!番外編』で載せた関数と同じモノです。ソコから持ってきて下さい。
static void dib_fill(const BITMAPINFOHEADER* dst_h, unsigned char* dst_bits,
unsigned int dst_x, unsigned int dst_y, unsigned int width, unsigned int height, COLORREF color
) {
:
}
DC の指定領域を塗り潰す
FillRect WINAPI 関数の DIB バージョンみたいな関数です。DIB の指定領域を指定色(0xAABBGGRR)で塗り潰す用途で使用します。
※手抜きしているため DIB からハミ出る領域を塗り潰そうとするとエラい事になります。必要があるなら対策を組み込んでください(
dib_blt 関数を参考にすれば良いかな)
wmain に入っていきます。
unsigned char* output_bits;
HBITMAP output = ::CreateDIBSection(NULL, reinterpret_cast<BITMAPINFO*>(&output_h), DIB_RGB_COLORS,
reinterpret_cast<void**>(&output_bits), NULL, 0);
"output buffer" を確保しています。"output buffer" については
APNG仕様書を確認してください。

簡単に説明するなら、上図の
「1 + 2」とか
「1 + 2 + 3」となっているモノが "output buffer" です。も一つ云うなら
「初期背景」が "canvas" に当たります。
dib.resize(apng_get_frame(&apng[0], apng.size(), i, NULL, 0, NULL));
apng_FRAME f;
apng_get_frame(&apng[0], apng.size(), i, &dib[0], dib.size(), &f);
指定フレームの DIB + `fcTL` チャンクに設定されている情報を取得しています。
if (f.dispose_op_ == APNG_DISPOSE_OP_PREVIOUS) {
memcpy(&backup[0], output_bits, output_h.biSizeImage);
}
現在のフレームの dispose_op が APNG_DISPOSE_OP_PREVIOUS 時、後で戻せるように "output buffer" の内容をバックアップしています。
BITMAPINFOHEADER* frame_h = reinterpret_cast<BITMAPINFOHEADER*>(&dib[0]);
dib_blt(&output_h, output_bits, f.x_offset_, f.y_offset_, f.width_, f.height_,
frame_h, &dib[0] + frame_h->biSize, 0, 0, (f.blend_op_ == APNG_BLEND_OP_OVER && i > 0 && alpha));
"output buffer" に対して現在のフレームを合成しています。先に示した図で云うと
「1 + 2」とか
「1 + 2 + 3」を作っている段階です。
このサンプルでは、blend_op == APNG_BLEND_OP_OVER は 2nd フレーム目以降有効(
i > 0 条件文)とする処理を行っています。が、これは多分…俺解釈してます。
APNG 仕様書には特別にこんな処理をしろとは書いてません。
が…仕様書には
「Note that for the first frame the two blend modes are functionally equivalent due to the clearing of the output buffer at the beginning of each play.」って書いてんだよなぁ…
「最初のフレームでは blend_op に関係無く出力バッファの内容は同じになるよ。何故なら、その時出力バッファの内容は必ずクリアされてるんだからね。当然だよハッハッハ。」って事なんだけど
output_buf = RGBA(0, 0, 0, 0);
1st_frame = RGBA(128, 128, 128, 128);
// APNG_BLEND_OP_SOURCE(そのまま上書き)
output_buf + 1st_frame = RGBA(128, 128, 128, 128);
// APNG_BLEND_OP_OVER(アルファ値反映)
output_buf + 1st_frame = RGBA(64, 64, 64, 64);
一緒にならねぇ!!! て事なんで、サンプルでは first frame のアルファ値は無視する対応を入れてます。本当にこんな対応が要るのかどうかは判りません。
::InvalidateRect(NULL, NULL, TRUE);
前フレーム描画時の残像が残らないように画面上の全てのウィンドウに対して再描画要求をしています。
普通要らない処理です。(無理矢理)コンソールプログラムで
APNG アニメーションのサンプルを示すため(Windowsプログラムだとコード量、解説量が多くなるので嫌)イメージをプライマリモニタ上に直接描画しているのでこんな事をしています。
alphablend(pdc, 100, 100, h.width_, h.height_, dc, 0, 0, alpha);
"canvas" に対して "output buffer" を合成しています。先に示した図で云うと
「背景 +1」とか
「背景 +2」を作っている段階です。
switch (f.dispose_op_) {
case APNG_DISPOSE_OP_BACKGROUND:
// 今回フレーム合成した領域を”完全透過な黒”で塗潰し
dib_fill(&output_h, output_bits, f.x_offset_, f.y_offset_, f.width_, f.height_, fully_transparent_black);
break;
case APNG_DISPOSE_OP_PREVIOUS:
// 描画前の状態に戻す
memcpy(output_bits, &backup[0], output_h.biSizeImage);
break;
}
'dispose_op' で指示された内容に沿って "output buffer" を修正しています。
const int adjust = ::timeGetTime() - time;
::Sleep(::MulDiv(f.delay_num_, 1000, (f.delay_den_ == 0 ? 100 : f.delay_den_)) - adjust);
time = ::timeGetTime();
次のフレームの表示時間まで待機しています。一応フレームのload等の処理に掛かった時間を考慮した処理を組んでいます。が、これは
「考慮しないといけないよ」と示したかっただけで本格的な対応方法ではありません。きちんとしたければ
『現在のフレームを表示後、次フレームを先読み(load)してから待機する』とした方が良いでしょう。
簡易アニメーション規格というものはまだ必要だと思います。現在は
GIF がその役目を務めていますが、現状では役不足(誤用)である事は否定できません。
APNG には是非
AGIF の後継規格としての立場を得て貰いたいものです。本来その役目を継ぐべきだった
MNG は己を過信(勘違い)し明後日の方向へ走り去ってしまった
※ため
APNG が務めないと仕方が無いのです。
※20世紀末頃にあった”大艦巨砲主義万歳。コストを過剰に気にする奴て何なの?死ぬの?”という流れに JPEG2000 や CSS2.0 等と共に乗ってしまっただけで、当時としては間違っていなかった可能性も皆無ではありませんが…
とにかく、規格は活用されてなんぼです。
APNG を活用するための壁は高くないので皆で使っていきましょう。
と最後にそれらしき事を謳って、6月半ばから長々と続けてきた
APNG に関する雑記を〆ます。
---- 終わり ----
2008/08/24
『APNGを探究しよー! 番外編』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
前回予告通り愚痴垂れます。
AlphaBlend 関数は画像間の半透明合成を実現する Windows API です。この関数は送信先画像に対して送信元画像を ?%(任意で指定可能) の割合で合成するという様な使用方法に加え、送信元画像がアルファ値を持っている場合はそれを反映して半透明合成する事も可能、という優れものです。
『APNGを探究しよー! 7』で”アルファブレンディング”を扱おうと考えていた自分にとってはタイムリーな関数でした。
何せ、チマチマ々々ピクセル単位でアルファブレンディング処理を行っているコードを示して
「”アルファブレンディング”するためにはこのようなコードを書いて下さい。ではコードの解説をしていきましょう。」
と紹介するよりは、
「AlphaBlend WINAPI で”アルファブレンディング”できます。」
と紹介できた方が遥かにお手軽な印象を与えられます。
『APNGを探究しよー』連載の主趣旨は軽〜く
APNG を触ってみる、という事なので、API を一発 call するだけで済む状況はまさしく”理想”なのです。
ただ、こんな愚痴を垂れている時点でお察しと思いますが、
AlphaBlend WINAPI は俺の”理想”に応えてくれるモノではありませんでした。率直に云うと”
PNG のアルファブレンディング処理に
AlphaBlend WINAPI は使えない”という事です。

これはW3Cの公式ページで公開されているアルファチャンネルを持った
PNG ファイルのサンプル(alphatest.png)です。
RGBイメージは

なのですが、アルファチャンネルに対応したデコーダで再生すると

なカンジで表示されます。
この
PNG を
AlphaBlend WINAPI を利用してアルファブレンディングするとどうなると思います?

やってみました、こうなりました。一見するとアルファブレンディングできているように思えます。
でも何か違和感がありませんか?
全体的に白色の主張が強いっていうか、アレ?
白の部分って半透明なってない?っていうか、
バーモントカレーの”バーモント”は地名なんだけど
バーモントカレーはバーモント地方の名産カレーでは無いよね?っていうか、
らんらんるーというか…。
そう。もうお判りですね。本来完全透過されるべき(アルファ値が 0 指定されている)白色の部分が透過されずにそのまま居座っている、コレが違和感がの正体です。摩訶不思議なんじゃコリャ!です。
AlphaBlend WINAPI では期待通りの結果を得られないという事は判りました。では、この不可思議現象は何なのでしょうか?
私は
「bug じゃねえの?」と思ったのですが、調査した結果”この動作は
AlphaBlend WINAPI の正式仕様通りで、
AlphaBlend 関数的には全く問題無い”事が判りました。
PNGの仕様では、下記式によって半透明合成された値を求めることができると示されています。
output = alpha * foreground + (1-alpha) * background
では、仮に background =
RGB(100, 150, 200)、foreground =
RGBA(250, 250, 250, 128) の場合どうなるか観てみましょう。
alpha = foreground.alpha / 255;
output.red = alpha * foreground.red + (1.0 - alpha) * background.red;
output.green = alpha * foreground.green + (1.0 - alpha) * background.green;
output.blue = alpha * foreground.blue + (1.0 - alpha) * background.blue;
この計算式を経た結果 output ==
RGB(175, 200, 225) となります。この値がアルファブレンディングした場合の(
PNG 仕様で想定されている)正解値です。
では
AlphaBlend API でアルファブレンディングした場合どのようになっているのでしょうか?
結論を先に示しておきましょう。output ==
RGB(255, 255, 255) となります。
こうなる理由はMSDNの
BLENDFUNCTION 構造体の解説に載っていました。
If the source bitmap does not use SourceConstantAlpha (that is, it equals 0xFF), the per-pixel alpha determines the blend of the source and destination bitmaps, as shown in the following table.
Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red
Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green
Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue
PNG仕様で示されている計算式(== 一般的なアルファ合成式)
output = alpha * foreground + (1 - alpha) * background
と見比べれば違いは一目瞭然でしょう。
AlphaBlend API では
foreground(Src) にアルファ係数を掛けやがらない仕様のようなんです。何故かは分かりません。信念でしょうか?宗教でしょうか?ただの馬鹿なんでしょうか?
ともかく、この仕様により alphatest.png の
RGBA(255, 255, 255, 0) の部分は真白になっています。通常
「A(Alpha) == 0」は完全透過を意味しているのですが、
AlphaBlend API のイミフ仕様にかかればそんなの関係ありません。
”
PNG のアルファブレンディング処理に(現時点では)
AlphaBlend WINAPI は使えない”事は理解頂けたでしょうか。
機能追加 or 仕様変更によって将来使えるモノになる事を期待しましょう。
さて、
AlphaBlend WINAPI が将来使えるモノになる事を期待するのは良いとしても…現状では使えない事は事実です。そうなると”
AlphaBlend WINAPI を代替する手段”が必要になってきます。
でも代替手段の調査とかもう色々メンドクサくさいので、今回は自力で用意してしまいましょう。
Visual C++
static void dib_blt(
const BITMAPINFOHEADER* dst_h, unsigned char* dst_bits, int dst_x, int dst_y, int width, int height,
const BITMAPINFOHEADER* src_h, const unsigned char* src_bits, int src_x, int src_y, bool blend
) {
assert(dst_h->biBitCount == 24 || dst_h->biBitCount == 32);
assert(src_h->biBitCount == 24 || src_h->biBitCount == 32);
assert(dst_h->biHeight >= 0 && src_h->biHeight >= 0);
// 転送幅が src より大きい場合修正
width = min(width, src_h->biWidth);
height = min(height, src_h->biHeight);
// 転送先座標が-値の場合修正
if (dst_x < 0) {
width += dst_x;
src_x += -dst_x;
dst_x = 0;
}
if (dst_y < 0) {
height += dst_y;
src_y += -dst_y;
dst_y = 0;
}
// 転送先が dst よりはみ出る場合修正
width = min(width, dst_h->biWidth - dst_x);
height = min(height, dst_h->biHeight - dst_y);
// dst に影響が無い場合は抜ける
if (width <= 0 || height <= 0 || dst_x >= dst_h->biWidth || dst_y >= dst_h->biHeight || src_x >= src_h->biWidth || src_y >= src_h->biHeight) {
return;
}
// 4 byte 境界を考慮して 1 ライン辺りの byte 数を求める
const int dst_rowbytes = ((dst_h->biBitCount * dst_h->biWidth + 31) >> 5) << 2;
const int src_rowbytes = ((src_h->biBitCount * src_h->biWidth + 31) >> 5) << 2;
// byte per pixel を求める
const int dst_pixelbytes = dst_h->biBitCount >> 3;
const int src_pixelbytes = src_h->biBitCount >> 3;
// (dst_x, dst_y) 位置へ移動
dst_bits += dst_rowbytes * (dst_h->biHeight - 1 - dst_y) + dst_pixelbytes * dst_x;
// (src_x, src_y) 位置へ移動
src_bits += src_rowbytes * (src_h->biHeight - 1 - src_y) + src_pixelbytes * src_x;
// blt
for (int y=0; y < height; ++y) {
for (int x=0; x < width; ++x) {
unsigned char* dst = &dst_bits[dst_pixelbytes * x];
const unsigned char* src = &src_bits[src_pixelbytes * x];
if (blend && src_pixelbytes == 4) {
// src にアルファチャンネルが存在
const int B=0, G=1, R=2, A=3;
dst[B] = dst[B] + (src[B] - dst[B]) * src[A] / 255;
dst[G] = dst[G] + (src[G] - dst[G]) * src[A] / 255;
dst[R] = dst[R] + (src[R] - dst[R]) * src[A] / 255;
if (dst_pixelbytes == 4) {
// dst にアルファチャンネルが存在
dst[A] = dst[A] + (src[A] - dst[A]) * src[A] / 255;
}
}
else {
// そのまま上書き
memcpy(dst, src, min(dst_pixelbytes, src_pixelbytes));
}
}
// (dst_x, dst_y + (y + 1)) 位置へ移動
dst_bits -= dst_rowbytes;
// (src_x, src_y + (y + 1)) 位置へ移動
src_bits -= src_rowbytes;
}
}
static void alphablend(HDC dst, int x, int y, int width, int height, HDC src, int src_x, int src_y, bool blend) {
if (blend) {
DIBSECTION ds;
if (::GetObject(::GetCurrentObject(src, OBJ_BITMAP), sizeof(ds), &ds) > 0 && ds.dsBm.bmBitsPixel == 32) {
// src が DIBSECTION で alpha-channel が存在
BITMAPINFOHEADER mem_h = { 0 };
mem_h.biSize = sizeof(mem_h);
mem_h.biWidth = width;
mem_h.biHeight = height;
mem_h.biPlanes = 1;
mem_h.biBitCount = 32;
unsigned char* mem_bits;
// screen dc から直接 DIB を取得する方法を俺は知らない(dst==screen dc だった場合)のでメモリbitmapを介す
HBITMAP bmp = ::CreateDIBSection(NULL, reinterpret_cast<BITMAPINFO*>(&mem_h), DIB_RGB_COLORS, reinterpret_cast<void**>(&mem_bits), NULL, 0);
HDC mem = ::CreateCompatibleDC(dst);
HGDIOBJ oldbmp = ::SelectObject(mem, bmp);
// dst の対象領域内のデータを mem にコピー
::BitBlt(mem, 0, 0, width, height, dst, x, y, SRCCOPY);
// mem に src を alphablending
dib_blt(&mem_h, mem_bits, 0, 0, width, height, &ds.dsBmih, static_cast<unsigned char*>(ds.dsBm.bmBits), src_x, src_y, true);
// mem を dst にコピー
::BitBlt(dst, x, y, width, height, mem, 0, 0, SRCCOPY);
// lalala 後始末〜
::SelectObject(mem, oldbmp);
::DeleteDC(mem);
::DeleteObject(bmp);
return;
}
}
// alphablending せずそのままコピー
::BitBlt(dst, x, y, width, height, src, src_x, src_y, SRCCOPY);
}
int main() {
:
// BLENDFUNCTION bf;
// bf.BlendOp = AC_SRC_OVER;
// bf.BlendFlags = 0;
// bf.SourceConstantAlpha = 0xff;
// bf.AlphaFormat = AC_SRC_ALPHA;
// ::AlphaBlend(dst, x, y, width, height, src, 0, 0, width, height, bf);
alphablend(dst, x, y, width, height, src, 0, 0, true);
:
}
画像サイズ伸縮してのアルファブレンディングには未対応ですが、こんなカンジでしょうか。

解説はソース内コメントで済ませていますのでソレを見てください。
次回は最終章最終幕。
APNG を自力でアニメーション再生してみます。
2008/08/14
『APNGを探究しよー! 7』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
今回から最終章となります。
(最終章は最終回ではありません。出展:どっかのテレビ局)
APNG を再生する方法として
apngレンダラウィンドウを利用する方法を
『APNGを探究しよー! 4』で紹介しました。
ですが、
apngレンダラウィンドウは手軽&自動的に
APNG の再生表示を行える反面、自動化されているが故に独自カスタマイズ(ex. 指定背景イメージに重ねて再生、シャア専用化等)する事が難しいです。
とはいっても独自カスタマイズを施して再生したい場合は在ります。そのような場合どうすれば良いのでしょうか?
って訊くまでも無いですね。自力でアニメーション再生処理を組めば良いのです。欲しい機能が存在しないなら自分で組む自分で作る。プログラマナラアタリマエ〜 by
アルシンド
では
APNG のデコード処理行う際、最低限やらなければならない事とは何でしょうか?
- 透過色・アルファチャンネルへの対応
- アニメーション
この2点への対応は必須でしょう。他、gamma 値の反映とか細かいものを挙げれば幾つかありそうですが…その辺りは無視しても許される気がします。”気”ダケかもシレマセンガ。
とりあえず細かい事は措いておいて、今回は”透過色・アルファチャンネルへの対応”についてやりましょう。
サンプルを示します。
APNG のアルファチャンネルの情報を反映してスクリーン画面に合成するプログラムです。
Visual C++
#include <vector>
#include <fstream>
#include <iterator>
using namespace std;
#include <cassert>
#include <windows.h>
#pragma comment(lib, "msimg32.lib") // for AlphaBlend()
#include "apng.h"
#pragma comment(lib, "apng.lib")
static void blend_to_screen(const void* dib, int x, int y) {
const BITMAPINFOHEADER* bih = static_cast<const BITMAPINFOHEADER*>(dib);
assert((bih->biBitCount == 24 || bih->biBitCount == 32) && bih->biCompression == BI_RGB);
const SIZE size = { bih->biWidth, abs(bih->biHeight) };
void* bits;
HBITMAP bitmap = ::CreateDIBSection(NULL, static_cast<const BITMAPINFO*>(dib), DIB_RGB_COLORS, &bits, NULL, 0);
if (bitmap != NULL) {
memcpy(bits, static_cast<const unsigned char*>(dib) + bih->biSize, (((bih->biBitCount * size.cx + 31) >> 5) << 2) * size.cy);
HDC pdc = ::GetDC(NULL);
HDC dc = ::CreateCompatibleDC(pdc);
HGDIOBJ oldbmp = ::SelectObject(dc, bitmap);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0xff;
bf.AlphaFormat = (bih->biBitCount == 32 ? AC_SRC_ALPHA : 0);
::AlphaBlend(pdc, x, y, size.cx, size.cy, dc, 0, 0, size.cx, size.cy, bf);
::SelectObject(dc, oldbmp);
::DeleteDC(dc);
::ReleaseDC(NULL, pdc);
::DeleteObject(bitmap);
}
}
int wmain(int argc, wchar_t* argv[]) {
if (argc == 2) {
ifstream fs(argv[1], ios_base::in | ios_base::binary);
vector<char> apng((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
apng_HEADER h;
apng_get_header(&apng[0], apng.size(), &h);
std::vector<unsigned char> dib;
if ((h.valid_flags_ & apng_HAVE_DEFIMG)) {
dib.resize(apng_get_frame(&apng[0], apng.size(), 0xffffffff, NULL, 0, NULL));
apng_get_frame(&apng[0], apng.size(), 0xffffffff, &dib[0], dib.size(), NULL);
blend_to_screen(&dib[0], 0, 0);
--h.num_frames_;
}
for (unsigned int i=0; i < h.num_frames_; ++i) {
dib.resize(apng_get_frame(&apng[0], apng.size(), i, NULL, 0, NULL));
apng_get_frame(&apng[0], apng.size(), i, &dib[0], dib.size(), NULL);
blend_to_screen(&dib[0], 32 + 80 * (i & 0x07), 48 + 96 * (i / 8));
}
}
return 0;
}
このプログラムを実行すると、プログラムの第 1 引数で渡された
APNG ファイルに含まれるフレームイメージがデスクトップ画面上に一覧表示されます。

こんな感じです。アルファブレンド処理が行われているので背景との境目も綺麗ですね。
ではソースの解説を。wmain から
身定期魔性見ていきましょう。
なんて変換をしやがるんですか>IME様
ifstream fs(argv[1], ios_base::in | ios_base::binary);
vector<char> apng((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
apng_HEADER h;
apng_get_header(&apng[0], apng.size(), &h);
APNG をメモリ上に load して、
APNG のヘッダ情報を取得しています。前にもやりました。
if ((h.valid_flags_ & apng_HAVE_DEFIMG)) {
APNG に標準画像が含まれているかどうかを判断しています。詳細は api.html の
apng_HEADER 項を見てください。
dib.resize(apng_get_frame(&apng[0], apng.size(), 0xffffffff, NULL, 0, NULL));
apng_get_frame(&apng[0], apng.size(), 0xffffffff, &dib[0], dib.size(), NULL);
第 3 引数に 0xffffffff を指定して標準画像の DIB を取得しています。この関数は元 APNG の形式に関わらず、24bpp / 32bpp の無圧縮 DIB を返します。
blend_to_screen(&dib[0], 0, 0);
取得した DIB をスクリーン画面に対してアルファブレンディングしています。詳細は後述。
for (unsigned int i=0; i < h.num_frames_; ++i) {
dib.resize(apng_get_frame(&apng[0], apng.size(), i, NULL, 0, NULL));
apng_get_frame(&apng[0], apng.size(), i, &dib[0], dib.size(), NULL);
blend_to_screen(&dib[0], 32 + 80 * (i & 0x07), 48 + 96 * (i / 8));
}
APNG に含まれているフレーム数分ループを回しています。中でやっている事は標準画像処理時と大差ありません。
blend_to_screen 関数の中身も少し見てみましょう。
HBITMAP bitmap = ::CreateDIBSection(NULL, static_cast<const BITMAPINFO*>(dib), DIB_RGB_COLORS, &bits, NULL, 0);
memcpy(bits, static_cast<const unsigned char*>(dib) + bih->biSize, (((bih->biBitCount * size.cx + 31) >> 5) << 2) * size.cy);
DIB セクションを作成して元 DIB をコピーしています。Windows の GDI 機能を利用するためですね。
bf.SourceConstantAlpha = 0xff;
bf.AlphaFormat = (bih->biBitCount == 32 ? AC_SRC_ALPHA : 0);
::AlphaBlend(pdc, x, y, size.cx, size.cy, dc, 0, 0, size.cx, size.cy, bf);
WINAPI の
AlphaBlend 関数を利用してアルファブレンディングしています。
上記例のように
BLENDFUNCTION 構造体の値を設定する事で、『DIB にアルファチャンネルが含まれている場合はアルファ値を反映してブレンディング、含まれていない場合はそのまま上書き』という動作をさせる事ができます。
とサンプルソースの解説も一通り終わった所で”透過色・アルファチャンネルへの対応”に関する雑記は終了の予定だったんですが…
AlphaBlend WINAPIが俺の期待通りの関数ではなかったため次回に引かざるを得なくなりました。
そういうワケなんで、次回は番外編という形で
AlphaBlend 関数について愚痴垂れます。
2008/08/12
『APNGを探究しよー! 6』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
まだまだ逝くよ〜♪ 巫女みこナー(ry
… …
え〜、とうとう
APNG ファイルを保存する段階までやってきました。
当初考えていたより連載回数もgdgd感も増していますが後ろは振り返らない事にします。
では
apng.dll を利用して
APNG を保存する際の流れを示しましょう。
- apng_file_create 関数でapngファイルハンドルを作成
- apng_file_addframe 関数でフレームを登録
- apng_closehandle 関数でapngファイルハンドルを開放して終了
シンプルです。詰まる要素は無いハズです。
今回のサンプルプログラムの実行結果イメージを先に出しておきましょう。

プログラムを実行すると
# Enter path of PNG file that is used for APNG's frame data. という文が表示され、
APNG のフレームとして利用する
PNG ファイルパスの入力を求められます。
PNG ファイルパスの入力が完了(空行で Enter キー)後、続いて
# Enter path of output APNG file. と
APNG の保存先パスの入力を求められ、入力完了するとそのパスに
APNG ファイルが保存されます。
Visual C++
#include <locale>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;
#include <windows.h>
#include "apng.h"
#pragma comment(lib, "apng.lib")
static bool get_parameter(vector<wstring>& frames, wstring& output) {
wcout << L"# Enter path of PNG file that is used for APNG's frame data." << endl;
<< L"001<";
frames.clear();
wstring path;
while (getline(wcin, path) && !path.empty()) {
frames.push_back(path);
wcout << setw(3) << setfill(L'0') << frames.size() + 1 << L">";
}
output.clear();
if (!frames.empty()) {
wcout << endl << L"# Enter path of output APNG file." << endl << L">";
getline(wcin, output);
}
return !output.empty();
}
int wmain() {
wcout.imbue(locale(locale("japanese"), "C", locale::numeric));
vector<wstring> frames;
wstring output;
if (get_parameter(frames, output)) {
vector<wstring>::iterator it = frames.begin();
ifstream fs(it->c_str(), ios_base::in | ios_base::binary);
vector<char> png((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
fs.close();
vector<char> dib(apng_get_frame(&png[0], png.size(), 0xffffffff, NULL, 0, NULL));
apng_get_frame(&png[0], png.size(), 0xffffffff, &dib[0], dib.size(), NULL);
const int wigth = reinterpret_cast<BITMAPINFOHEADER*>(&dib[0])->biWidth;
const int height = reinterpret_cast<BITMAPINFOHEADER*>(&dib[0])->biHeight;
void* file = apng_file_create(output.c_str(), frames.size(), 0, wigth, height, apng_RGB_24, NULL, 0, apng_VALID_ALPHA | apng_VALID_HICOMPRESS, NULL, NULL, NULL, 0);
if (file != NULL) {
apng_file_addframe(file, &dib[0], 0, 0, 500, 1000, 1, 0);
for (++it; it != frames.end(); ++it) {
fs.clear();
png.erase(png.begin(), png.end());
fs.open(it-<c_str(), ios_base::in | ios_base::binary);
copy((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>(), back_inserter(png));
fs.close();
dib.resize(apng_get_frame(&png[0], png.size(), 0xffffffff, NULL, 0, NULL));
apng_get_frame(&png[0], png.size(), 0xffffffff, &dib[0], dib.size(), NULL);
apng_file_addframe(file, &dib[0], 0, 0, 500, 1000, 1, 0);
}
apng_closehandle(file);
}
}
return 0;
}
wmain() に着目。
if (get_parameter(frames, output)) {
get_parameter 関数は
APNG のフレームとして使用する
PNG ファイル、
APNG の出力先パスを求める関数です。
vector<wstring>::iterator it = frames.begin();
ifstream fs(it->c_str(), ios_base::in | ios_base::binary);
vector<char> png((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
1stフレームとして登録された
PNG ファイルをメモリ上のバッファに読みこんでます。
vector<char> dib(apng_get_frame(&png[0], png.size(), 0xffffffff, NULL, 0, NULL));
apng_get_frame(&png[0], png.size(), 0xffffffff, &dib[0], dib.size(), NULL);
apng_get_frame 関数は
PNG/
APNG から(元イメージの色形式、色深度等に関わらず) 24bpp / 32bpp の無圧縮 DIB を取得する関数です。
PNG/
APNG に透過色(tRNSチャンク) or αチャンネルが存在する場合は 32bpp、存在しない場合は 24bpp の DIB が得られます。
※透過色(tRNS)情報はα値に変換(透過色のα値は
0 に設定され、他色のα値は
255 に設定)されます。
この関数を利用して
PNG イメージを DIB に変換しています。最初に必要バッファサイズを得てから再度関数を call してデータを得る、という
apng_get_XXXX 系関数御馴染の手順は変わらずです。
void* file = apng_file_create(output.c_str(), frames.size(), 0,
wigth, height, apng_RGB_24, NULL, 0, apng_VALID_ALPHA | apng_VALID_HICOMPRESS,
NULL, NULL, NULL, 0);
apngファイルハンドルを作成しています。
関数の引数が多くて嫌になりますが
CreateFont WINAPIよりは(1つだけど)少ないので批難は勘弁してください。
apng_file_addframe(file, &dib[0], 0, 0, 500, 1000, 1, 0);
1stフレームを登録しています。フレームのパラメータは x=0, y=0, delay=500ms, dispose_op=1, blend_op=0 固定(サンプルだから手抜き…)で設定しています。
for (++it; it != frames.end(); ++it) {
:
}
ループを回して2ndフレーム以降も
apng_file_addframe しています。
apng_closehandle(file);
apngファイルハンドルを閉じて終了です。
apng_file_create 関数の第 2 引数で指定したフレーム数回
apng_file_addframe 関数を call した後に
apng_closehandle 関数で
apngファイルハンドルを閉じて、やっと正常な
APNG ファイルが完成します。この手順を完遂できなかった場合の
APNG ファイルは正常なものではありませんので、必要に応じて削除するなり何なりした方が良いでしょう。
今回は
APNG ファイルの保存方法について紹介しました。これに
『探究しよー! 4』、
『探究しよー! 5』で紹介した内容を足せば簡単な
APNG エンコードツールを作れます。少しでも「やってやるぜ!」と思えた人は挑戦してみてはいかがでしょうか。
次回からは
APNG デコーダを開発する際に必要な情報について扱っていきます。
2008/07/24
『APNGを探究しよー! 5』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
まだまだ
APNG を program ます。
今回は
APNG から情報を取得したり、APNG を PNG に分解したりするのですが…正直テーマが軽すぎました。
apng.dll 付属の api.html を見れば瞬終の内容を
ドラゴンボールZ並の内容の薄さで解説する事になりますがご理解ください。
とりあえず
APNG から各種情報を取得するサンプルを出しましょう。
Visual C++
#include <locale>
#include <iostream>
#include <iomanip>
#include <vector>
#include <fstream>
#include <iterator>
using namespace std;
#include <windows.h>
#include "apng.h"
#pragma comment(lib, "apng.lib")
int wmain(int argc, wchar_t* argv[]) {
if (argc == 2) {
wcout.imbue(locale(locale("japanese"), "C", locale::numeric));
wcout << argv[1] << endl;
ifstream fs(argv[1], ios_base::in | ios_base::binary);
vector<char> apng((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
apng_HEADER h;
apng_get_header(&apng[0], apng.size(), &h);
cout << "---- header ----" << endl;
cout << "幅 :" << h.width_ << endl
<< "高さ :" << h.width_ << endl
<< "bpp :" << h.bit_depth_ * h.channels_ << endl
<< "再生回数 :" << h.num_plays_ << endl
<< "フレーム数 :" << h.num_frames_ << endl;
if ((h.valid_flags_ & apng_HAVE_DEFIMG)) {
cout << "※ デフォルトイメージを含んでいます。" << endl;
}
vector<apng_PALETTE> p(apng_get_palette(&apng[0], apng.size(), NULL, 0));
if (!p.empty()) {
apng_get_palette(&apng[0], apng.size(), &p[0], p.size());
cout << "---- palette ----" << endl;
for (size_t i=0; i < p.size(); ++i) {
cout << setw(3) << setfill('0') << i + 1 << ' '
<< "rgba("
<< int(p[i].red_) << ','
<< int(p[i].green_) << ','
<< int(p[i].blue_) << ','
<< int(p[i].alpha_)
<< ")" << endl;
}
}
vector<apng_FRAME> f(apng_get_framelist(&apng[0], apng.size(), NULL, 0));
if (!f.empty()) {
apng_get_framelist(&apng[0], apng.size(), &f[0], f.size());
cout << "---- frames ----" << endl;
for (size_t i=0; i < f.size(); ++i) {
cout << setw(3) << setfill('0') << i + 1 << ' '
<< f[i].x_offset_ << ',' << f[i].y_offset_ << ','
<< f[i].width_ << ',' << f[i].height_ << ','
<< f[i].delay_num_ << ',' << f[i].delay_den_ << ','
<< int(f[i].dispose_op_) << ',' << int(f[i].blend_op_)
<< endl;
}
}
}
return 0;
}
ではソースを解説。
wcout.imbue(locale(locale("japanese"), "C", locale::numeric));
数値関係は C ロケール、それ以外は日本語ロケールを使用するように設定してます。
ifstream fs(argv[1], ios_base::in | ios_base::binary);
vector<char> apng((istreambuf_iterator<char>(fs)), istreambuf_iterator<char>());
ファイルからメモリ上に
APNG データを読み込んでます。
apng_HEADER h;
apng_get_header(&apng[0], apng.size(), &h);
APNG のヘッダ情報を取得してます。
第 1 引数に
APNG データの先頭アドレス、第 2 引数に
APNG のデータサイズ、という形は
apng_get_XXXX 系関数で共通です。
vector<apng_PALETTE> p(apng_get_palette(&apng[0], apng.size(), NULL, 0));
apng_get_palette(&apng[0], apng.size(), &p[0], p.size());
まず
APNG が持っているパレット数を取得 + バッファ確保してます。
apng_get_palette 関数の第 3 引数に NULL を指定しているのが”キモ”です。
バッファ確保後に再度
apng_get_palette 関数をcallしてパレット情報を
APNG から取得してます。
vector<apng_FRAME> f(apng_get_framelist(&apng[0], apng.size(), NULL, 0));
apng_get_framelist(&apng[0], apng.size(), &f[0], f.size());
APNG が持っているフレーム情報の一覧を取得しています。
apng_get_framelist 関数の基本的な使い方は
apng_get_palette 関数と同じです。
今度は
APNG を
PNG に分割するサンプルです。
Visual C++
int wmain(int argc, wchar_t* argv[]) {
if (argc == 3 || argc == 4) {
wcout.imbue(locale(locale("japanese"), "C", locale::numeric));
wcout << L"input : " << argv[1] << endl;
wcout << L"outdir : " << argv[2] << endl;
const wchar_t* const prefix = (argc == 4 ? argv[3] : L"");
const int count = apng_split_frame(argv[1], argv[2], prefix);
wcout << L"---- output files ----" << endl;
for (int i=0; i < count; ++i) {
wcout << prefix << setw(3) << setfill(L'0') << i + 1 << L".png" << endl;
}
}
return 0;
}
このサンプルは、プログラムの第 1 引数で渡された
APNG ファイルを、第 2 引数で渡されたフォルダに
PNG 分割して保存します。第 3 引数での
PNG ファイル名の接頭辞指定にも対応してます。
const int count = apng_split_frame(argv[1], argv[2], prefix);
APNG を
PNG に分割しています。
apng_split_frame 関数は分割保存した
PNG ファイル数を戻り値として返します。
for (int i=0; i < count; ++i) {
wcout << prefix << setw(3) << setfill(L'0') << i + 1 << L".png" << endl;
}
分割保存した
PNG ファイル名の一覧を標準出力に表示してます。
※PNG ファイル名の命名仕様については api.html を見てください。
サンプルソースを掲載したため文字数的にはそこそこありますが、内容的にはペラペラな回でした。
次回は
APNG ファイルの保存にちゃれんじです。
2008/07/14
『APNGを探究しよー! 4』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
前回のヒキ通り
APNG を program ます。
とは言っても
>> 「皆、APNG をチョイ触ってみよう」という感じの軽いものになる予定。
と第一回記事で言っているように軽ーくやっていきます。そこで、
APNG を手軽に扱えるように機能を纏めたDLLを用意しました。
つ
apng.dll (
APNG作成ツール/
VC6.0+MFC+コメント皆無ソースもこのDLLを使ってます)
今回、コイツを使って
APNG の再生表示に挑戦します。
まず
apng.dll を利用して
APNG を再生する際の基本的な流れを示しておきましょう。
- apng_view_ready 関数でapngビューハンドルを作成
- apng_view_play 関数で再生開始
- apng_closehandle 関数でapngビューハンドルを開放して終了
基本この3手順をこなせばokです。
↓にコンソールプログラムのサンプルを示します。
プログラムの引数として渡された
APNG を再生するプログラムです。
apng_view_play 関数実行と同時に別ウィンドウ(
apngレンダラウィンドウ)が表示され、そのウィンドウ内で
APNG が勝手に再生されます。
apng.dll を実行ファイルと同じフォルダに置くのを忘れないでください。
Visual C++
#include <windows.h>
#include "apng.h"
#pragma comment(lib, "apng.lib")
static int message_loop() {
MSG message;
while (GetMessage(&message, NULL, 0, 0) > 0) {
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}
static int CALLBACK handler_proc(int code, void* parameter) {
switch (code) {
case apng_VIEW_DESTROY:
PostQuitMessage(0);
break;
}
return 0;
}
int wmain(int argc, wchar_t* argv[]) {
if (argc == 2) {
void* view = apng_view_ready(argv[1], NULL);
if (view != NULL) {
apng_view_handling_notification(view, handler_proc, NULL);
apng_view_put_createparam(view, NULL, WS_OVERLAPPEDWINDOW, 0, CW_USEDEFAULT, CW_USEDEFAULT, -1, -1, NULL, GetSysColor(COLOR_WINDOW));
apng_view_play(view);
message_loop();
apng_closehandle(view);
}
}
return 0;
}
ソースを解説していきましょう。wmain() に注目してください。
void* view = apng_view_ready(argv[1], NULL);
apngビューハンドルを作成しています。argv[1] には
APNG のファイルパスが格納されています。
※この関数に関わらず、apnd.dll に文字列を渡す時は UNICODE でなければいけません。注意してください。
apng_view_handling_notification(view, handler_proc, NULL);
この関数は
apngレンダラウィンドウからのイベント(通知)をハンドリングするためのものです。
- APNG の再生が一巡した時(apng_VIEW_COMPLETE)
- apngレンダラウィンドウが閉じられようとした時(apng_VIEW_CLOSE)
- apngレンダラウィンドウが閉じられる時(apng_VIEW_DESTROY)
この3つのイベントのどれかが発生した際、第2引数で指定したコールバック関数が呼ばれます。
今回の例では
apng_VIEW_DESTROY イベントを捕まえて
PostQuitMessage WINAPI関数を呼んでいます。
apngレンダラウィンドウが閉じられた時にメッセージループを終了させるための処理ですね。
apng_view_put_createparam(view, NULL, WS_OVERLAPPEDWINDOW, 0, ...);
apngレンダラウィンドウのスタイル、初期位置、初期サイズ等の情報を指定しています。
でも、提示ソースでは全てデフォルト値を指定していますので意味が無い(わざわざ呼ばなくても良い)んですけどね。
今回はサンプルという事で付け加えておきました。
apng_view_play(view);
ここで
APNG の再生を開始しています。
message_loop();
apngレンダラウィンドウのWindowメッセージを処理するためにメッセージループを用意する必要があります。
apngレンダラウィンドウ絡みの機能を使用する際はメッセージループを忘れないように注意してください。
apng_closehandle(view);
apngビューハンドルを開放して後始末しています。
簡単ですね。
C# で書いたサンプルも載せておきます。やっている事は Visual C++ バージョンと同じです。
C#
using System;
using System.Runtime.InteropServices;
class sample {
[DllImport("apng.dll", CharSet=CharSet.Unicode)]
private extern static IntPtr apng_view_ready(string apng, IntPtr apng_view);
[DllImport("apng.dll")]
private extern static void apng_view_handling_notification(IntPtr apng_view, handling_notification_callback callback, IntPtr parameter);
[DllImport("apng.dll")]
private extern static int apng_view_play(IntPtr apng_view);
[DllImport("apng.dll")]
private extern static void apng_closehandle(IntPtr apng_handle);
private delegate int handling_notification_callback(int code, IntPtr parameter);
static void Main(string[] args) {
if (args.Length == 1) {
IntPtr view = apng_view_ready(args[0], IntPtr.Zero);
if (view != IntPtr.Zero) {
apng_view_handling_notification(view, new handling_notification_callback(handler_proc), IntPtr.Zero);
apng_view_play(view);
Windows.Forms.Application.Run();
apng_closehandle(view);
}
}
}
private static int handler_proc(int code, IntPtr parameter) {
switch (code) {
case apng_VIEW_DESTROY:
Windows.Forms.Application.ExitThread();
break;
}
return 0;
}
}
こちらも簡単ですね。
各関数についてもう少し詳しく知りたい方は
apng.dll に付属している api.html を見て頂くと良いです。
次回は
apng.dll を利用して
APNG から色々情報を取ってみたり
APNG を
PNG に分割したりしてみます。
2008/07/04
『APNGを探究しよー! 3』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
前回の予告通り、今回は
APNG を作ってみます。
と思ったのだけど、いきなり1から作っていくのはメドイので今回は既存
APNGファイルを弄んでみる事にします。
既存
APNGファイルは
http://animatedpng.com/の「Samples」辺りから借りてください。
とりあえず、
APNG を弄ぶためのツールを用意してみました。
つ
APNG作成ツール
これを使って説明をしていきます。
- ツールを起動してみる
おめでとう。
- 「おめでとう」て何やねん…
この果てしなく遠いAPNG坂を昇りはじめた君への餞の詞
- 説明始めろや…
じゃ、画面各部の説明を。画面イメージをどどん!

- カラータイプ
カラータイプでは色の管理方法と色の精度(色数)を指定します。
前回記事の「色の扱い方」で書いた パレット、RGBカラー、Grayscale 云々っていう辺りの設定ですね。
この3つの管理方法間の違い(特徴)についてさらっと解説しておきます。
- パレット(index color - ?bpp)
○ データサイズ(ファイルサイズ)を抑えられます
× 使える色数が少ないっす
「画質になんか拘らない。256色使えれば十分だ!」という人向けの方法です。
- RGBカラー(RGB color - ?bpp)
○ 画質最高。これだけの色数が使えれば画質劣化することなんかありえません
× データサイズが大きくなるでしょうねぇ…
「データサイズよりも画質優先」という人向けの方法です。
- Grayscale(grayscale - ?bpp)
○ データサイズ抑えられまくり + 画質最高!
× グレイスケールイメージしか扱えません
× 4bpp 以下の階調しか使用しない場合はα値を持つ事ができません(8bpp以上なら問題無し)
名の通り、グレイスケール(白黒画像)に特化した管理方法です。
- 透過設定
GIF でお馴染みの一色完全透過や、PNG の売りであるαチャンネル情報の有効/無効を指定します。
- 無し
「いちからか?いちからせつめいしないとだめか?」
- 透過色
100%完全透過される色を一色指定します。
- α値
画像、若しくはパレットに設定されたα情報を使用して半透明処理を行います。
PNG のα値についての解説もちょっと書いておこう
- α値は 0(100%透過)〜 255 or 65535(0%透過=100%不透過)で指定
- カラータイプがRGBカラー、Grayscaleの画像はpixel単位でα値を持つ
- カラータイプがパレットの画像は(パレットの)色単位でα値を持つ
※「透過色を有効にしつつαチャンネルも使っちゃうぜ!」なんて事はできません。共存不可です。
- 再生回数
「いちからか?いちからせつめい(ry」
- 背景色
透過、半透過された pixel と合成するために使用する背景の色を指定します。
て事なんですが…実は APNG の再生過程に措いてはあまり意味はありません。
何故なら、多くのケースでは『背景 == 背面にあるイメージ』であり、『背景 == 背景色で塗り潰した色』である事は皆無だからです。
APNG の仕様でも「特に背景として使用するイメージが無いのなら背景色で塗り潰したイメージを背景として使えば良いよ」という扱いです。
指定しても無視されるケースが多々だと思いますが指定したい人はヤっちゃってください。害は無いんで大丈夫。
- ガンマ値
APNG が自分のイメージ通り再現される環境下のスクリーンガンマ値を指定してください。
俗に「Macなら 1.8。Windows では 2.2。」と云われるアレの事です。細かい事はググってください。
- 標準画像
通常、APNG に対応していないデコーダで APNG を表示した場合 1 フレーム目が静止画として表示されます。
ですが、標準画像を指定時は 1 フレーム目の代わりに標準画像が静止画として表示されます。

この画像なんか標準画像を上手く利用していますね。
APNG 対応デコーダで表示した時は「Your browser does support Animated PNGs」と表示され、未対応デコーダの場合は「Your browser does not support Animated PNGs」と表示されます。
ちなみに APNG 対応デコーダでアニメーション再生した場合、標準画像は無視して再生されます。
- フレーム情報
ここでアニメーションのコマに関する情報を指定していきます。
- no、x、y、width、height
「いちからか?いち(ry」
…で済まそうと思ったのだけど書いて置かなければならない事があった。
APNG の画像サイズについてなんですが、このサイズは標準画像指定時は標準画像、未指定時は 1 番目のフレーム画像と同じサイズとなります。
そしてコレ重要なんですが、登録されるフレームは APNG のサイズからハみ出るような配置は不可です。
具体的に云えば、x, y, width、height は
- x >= 0 & width > 0 & x + width <= APNGの横幅
- y >= 0 & height > 0 & y + height <= APNGの縦幅
という条件を満たす値しか採る事ができません。
GIF だと「GIF サイズを自由に指定可&ハみ出てもok」と制限は緩かったのですが、APNG では厳しくなっています。
- alpha
対象フレーム画像がα情報を持っているかどうかの情報です。
”@”=持っている。”x”=否。です。
- delay(待機時間)
次フレーム表示までの待機時間(秒単位)です。APNG では分子と分母の値を指定する形で設定します。
「分数が解らないヤツはカエレ」という APNG 開発陣の強い意志が示されています。(ヲイ
- dispose_op(後始末)
フレームを表示後、次のフレームを表示する際、今回のフレーム領域の内容をどうするか、を指定します。
- そのまま残す(0)
「いちから(ry」
- 100%透過状態にする(1)
APNG の背面にあるイメージ(背景)が視える状態にします。=完全透過。
- 描画前の状態に戻す(2)
フレーム描画前の状態に戻します。所謂 Undo ですよアンドゥ。
- blend_op(合成)
これの説明が厄介なんだよな〜。ん〜本当に理解したい人はAPNG の仕様を読んで^^。
日本語訳してくれている方のページを紹介しておく APNG仕様 日本語訳。
図と読み手の察し能力に頼りきった解説も一応書いておくか。

のような3つのフレームで構成されている極シンプル(全フレームが x=0、y=0、サイズ=APNGサイズ、dispose_op=0 で構成)な APNG があるとしましょう。
簡潔に概要説明すると、始めは白で覆われているが再生が進むと徐々に背景が視えてくる感じの APNG です。
では、黒で塗り潰されたイメージを背景と仮定して実際に色がどのように変化していくか観てみます。

ハイ、こう為りま……イヤ!為らねぇ。為らん。為りゃしません。
GIF と同じ方式だとこんな感じで処理されるんですが APNG はこう為らないんですよ奥さん。

APNG ではこうなるんです。フレームと背景の合成が毎回行われるワケではないんです。
見ての通り、まず APNG のフレーム間でイメージ合成が為されるんです。次に、合成されたイメージと初期背景とが合成され、画面に出力されるイメージが完成するのです。此処100%テストにでますね。
え?「上の図では 1+2+3 とか書いてるのにまんま frame 3 と同じ値なんだけど…」だって。
良いトコに気付いてくれました。
ではさらに続けます。続けなければなりません。ややこしいです。
上記で示した例では、フレーム間でイメージ合成がされる際、新フレームがそのまま上書きされて合成されています。
実は APNG ではこのように完全上書きする方法の加えてもう一つ別アプローチが提供されています。

ハイ、其処の人寝ない。早弁しない。窓の外見て呆けない。頑張って付いて来てください。
やってる事は言葉にすると簡単です。
フレーム間のイメージ合成段階に措いてもα値を反映しているだけです。
壱の方法では背景と合成する段階でのみα値を反映するのですが、弐の方法ではフレーム間の合成段階でもα値を反映させるのです。
実は俺もサッパリです。弐の方法を使いこなせる自信なんかありません。つーか使いこなせる猛者なんているんでしょうか。というかこの解釈で合っているんでしょうか?もしかして俺解釈してますか?
と色々大変なので blend_op についてはなんとなく判った気になった程度で十分でしょう。
ツールでは「そのまま上書き(0)」が壱に当たり、「画像α値を反映して合成(1)」が弐の方法になります。
また透過設定でα値を選択していない場合、「画像α値を反映して合成」を指定すると APNG 保存処理時エラーになります。注意してください。
さて…APNG を弄んでみようという事でしたが…文章書き過ぎで疲れました。限界です。
ツールを使うに当たって必要な事は書ききったハズなんでもう落ちます。今回の題目完全スルーになっちゃいますけど…
興味が出た人も興味が出なかった人も各自で色々触ってみてください。意外と簡単ですから。
次回は
APNG を program ってみます。
2008/06/24
『APNGを探究しよー! 2』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
今回は
APNG と (Animated) GIF の仕様上の差異点に軽く触れてみます。
- 使用可能色数
GIF は各フレームに 2, 4, 8, 16, 32, 64, 128, 256 の色数を使用できます。
対して APNG は各フレームに 2, 4, 16, 256, 2^16, 2^24, 2^48 の色数を使用できます。
色数を多く使用することは容量の増大に直結しますので、無闇矢鱈に多くの色を使用する事は愚行です。
ですが昨今の状況から視ると、最大 256 色数しか使用できない GIF の制限は ”過去の遺物” という感が強いです。
- 色の扱い方
GIF は パレット を用いて色を管理します。
対する APNG は パレット に加えて RGBカラー、Grayscale といった管理方法が提供されています。
RGBカラー、Grayscale は GIF には無いので差異点も糞もないので放置、今回は パレット に焦点を当てます。
GIF、APNG 共に パレット を用いて色を管理できますが、GIF と APNG を比較した場合一点大きな違いが挙げられます。
GIF では最大1個のグローバルカラーテーブルとn個のローカルカラーテーブルを使用して色の管理を行います。(各用語の解説は省略)
この2種類のパレットの存在により、人夫々によって異なる
「画質よりもデータ容量を少なくしたい」、「データ容量圧縮よりも美しくアニメーションさせたい」
という風な相反する要望にも個別に対応できる仕様となっています。
では、APNG はどうかというと…実は GIF でいうグローバルカラーテーブルを一つだけしか持てない仕様になっています。
ローカルカラーテーブルを持つ事はできません。この点が GIF と大きく異なっています。
これは「ローカルカラーテーブルを使わなければならない状況ならば大人しくRGBカラー(2^24色数以上)を使用しなさい」という事なんでしょう。
ローカルカラーテーブルの存在は各フレームのデータの最適化を可能にします。が、反面、仕様を複雑にもします。
実際、兄弟規格?である MNG 規格にはローカルカラーテーブルが存在します。
つまり ”APNG にローカルカラーテーブルを組み込む事が技術的に難しかった” ワケでは無いのです。
APNG の仕様開発者はローカルカラーテーブルの存在により仕様が複雑化する事のマイナス面を嫌ったのでしょう。
そもそも APNG は ”MNG 規格の煩雑さ” に対する反発から生まれた規格です。
”規格の簡潔さ” を優先するのは正しい選択だと思います。
- 各フレームの形式
APNG には「全フレームが同じ形式(色階調)で構成されていなければならない」という制限があります。
GIF では「 1 フレーム目には 256 色使おう。2 フレーム目は 16 色で足りる。3 フレーム目は 64 色」という風に各フレーム個別に使用する色数を選ぶ事が可能です。
ですが APNG ではソレは許されません。全てのフレームは同じ形式で構成されていなければいけません。
これも、先に述べた ”規格の簡潔さ” を優先した結果でしょう。
- 透過/半透明
APNG は半透明処理に対応した簡易アニメーション規格である。
これが APNG の最大のセールスポイントだと俺は思っています。※ GIF と同じような一色のみの(完全)透過にも当然対応しています。
この半透明を旨く使いこなす事ができれば(ソレが難しいんだけどね…)表現の質が大幅に向上できます。
「半透明処理を行いながらアニメーションする事がそんな大した事なの?」
と思った人は一度 APNG に触れる事をお勧めします。新たな価値観を…多分、恐らく、もしかすれば…得られるでしょう。
という感じで今回は
GIF 規格との違いについて対比する形で
APNG 規格の仕様について触れてみました。
次回は実際に
APNG を作ってみます。
2008/06/14
『APNGを探究しよー! 1』
「APNGを探究しよー!」(CV:森永佳奈) >>挨拶
良い噂しか流れてこないウェブブラウザ Firefox3 の正式版が 6月18日 にリリースされるようです。
この Firefox3 はレンダリング速度の超向上等の基本性能の改善に加えて、胸トキメク?多く新機能が追加されています。
ここで多くは語りませんが、その性能は IEオワタ \(^o^)/ を現実のものとするに足る代物です。
まぁ、Firefox3 に対応したアドオンが出廻るまで少し待つ必要があるかもしれませんけどね。
と Firefox3 を過剰気味に持ち上げたところで話のベクトルを本題に向けていこうと思います。
先に述べた通り Firefox3 には多くの新機能が追加されているのですが、その中の一つに「APNGのサポート」という項目がこっそりと存在します。
恐らくこの項目は多くの人にとって強く興味を引くものでは無いでしょう。多数の人は今後 APNG に触れる事無く人生を経過していく可能性が高いでしょう。
APNGというモノの位置付けを解り易く例えるなら…
ナイジェル・マンセル に対する リカルド・パトレーゼ、藤波辰巳 に対する 木戸修、王・長嶋 に対する 野村克也、といった感じ。
野村克也の言葉を借りて言えば「向日葵ではなく月見草」なのかもしれません。
だが、俺は「月見草」が好きっポイです。
ウィリアムズのファンではなかったが、パトレーゼが優勝した時は素直に喜びました。
3カウントフォールで試合が決着する事を望むが、木戸修のサブミッションは別でした。
現役時代は知らないが監督として見た場合、王・長嶋より野村の執る野球の方が好みです。
つまり、今後普及するかどうかも分からない、日蔭の存在であるが故に、APNG が気になっているって事です。
という事(ちょっと強引な振りだったか…)で次回から数回に分けて APNG について書いていきます。
内容は「皆、APNG をチョイ触ってみよう」という感じの軽いものになる予定。
2008/03/15
『近況報告且つ今後の行動予告』
- 昨年末から現実世界が大忙し
- 2月一杯で現実世界の忙しさが落ち着く
- 購入してから1年以上playし続けてきた「Rance7」にもいい加減飽きてくる
- つまり暇
- 時間潰そう何しよう〜
- ふむ。Webページの更新でもするか
- …そういえば「APNGの変」からもうすぐ1年
- …APNG関連のプログラムを組んでみるか、と思いつつもうすぐ1年
- …現在の仕様書では俺解釈が必要になるから、と情報を待ちつつもうすぐ1年
- でも一年経っても進展皆無。仕様書のバージョンも 1.0 のまま
- こりゃダメだ。待つだけ無駄ポイ!俺解釈採用!
- で、何作る?ビューア?エディタ?
- そういえば「vista糞」でバグ直せって書いトキ乍「送るせにょう」のバグは放置しっ放しジャーマンだった
- キミに決めた。バグ修正&APNG対応処理実装ケッテイ!
- 祝「#ガラクタ更新」 ←今ココ
- バグ修正だけで何回も更新依頼するのはvectorの人に悪いから公開後2週間バグが露見しなかったら依頼しよう
→ version 1.5.1 から前に進めず
だったvectorの「送るせにょう」もついでに更新!
- 何となく「俺はやったよ」感に浸る
- それも束の間。バグ発生してヘル状態!!
- 更新する + no debug = バグ発生。当前の事
- 怠けてデバッグしない俺の責任でしかないな。プログラムのしきたりとか分かってない…
- やる気消滅
- 「Rance7」に戻る
- 2009年へ
2007/11/25
『This behavior is by design』
Microsoft knowledge base等で調べモノをしていると
「この動作は、仕様です。」という文句を視掛けます。
この文句は
「大丈夫です。それは Microsoft が意図している通りなので正常な動作です」
と Microsoft 直々にお墨付きを与える事でユーザを安心させるサポート業務の際に授けられる有り難いモノです。
天下の Microsoft が発売した製品であるにも関わらず
「製品の動作がおかしい気がする」
などと要らぬ心配をしてしまう顧客も極稀にいるようですね。
で…実は私、今現在、その”極稀”に属してしまったようなんです。
誰かに相談に乗ってもらおうかと本気で悩んでます。
:
在る時、私は Windows Vista が載っているPCで要らないファイルを消そうと思ったのです。
そこで、エクスプローラを立ち上げて要らないファイルが入っている”temp”というフォルダを選択しました。

左側が Windows Vista です。
何故か右側に Windows XP の画面も付いてきてしまったのですが、気にしないで下さい。
次に、消す予定のファイルを選択する事にしました。

リスト表示されている内の上から 2, 3 番目のフォルダと、 4 番目のファイルを消す予定です。

選択できました。
この辺りの操作は慣れていましたので、余り躓く事はありませんでした。
そしてファイルを消すために「Delete」キーを押しました。

何度も経験済みなので、この辺りの動作も慣れていました。
確認のダイアログが表示される事は判っていました。
なので、流れるような手捌きで「Enter」キーを押しました。
,. -‐'''''""¨¨¨ヽ
(.___,,,... -ァァフ| あ…ありのまま 今 起こった事を話すぜ!
|i i| }! }} //|
|l、{ j} /,,ィ//| 『選んだファイルを削除したと思ったら
i|:!ヾ、_ノ/ u {:}//ヘ いつのまにか親フォルダごと消えていた』
|リ u' } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ'eラ , タ人 な… 何を言ってるのか わからねーと思うが
/' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも何をされたのかわからなかった…
,゙ / )ヽ iLレ u' | | ヾlトハ〉
|/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった…
// 二二二7'T'' /u' __ /:::::::/`ヽ
/'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ 操作ミスだとか誤動作だとか
/ // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ
ノ ' / ノ:::::`ー-、___/:::::// ヽ }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしいものの片鱗を味わったぜ…
:
これも
「by design」なんでしょうかねぇ。
2枚目の段階で
”確か”に削除対象のファイルを選択しています。
でも…3枚目を良く見てみると
Vistaのエクスプローラでは削除対象は
”temp”フォルダから移ってないんですよ。
フォーカスを左側のフォルダツリー窓から右側のファイルリスト窓に
移せていないのですよ。
XPでは
移せているのに
Vistaでは
移せていないのですよ。
※1
なのでXPと同じ感覚で操作をすると、ツリー窓で選択されている
”temp”フォルダが消えました。
…この動作はヤバイと思いますよ。
4枚目の段階で確認ダイアログが出ています。
よって”削除の最終決定”をユーザが下した、と言う事はできるでしょう。
が…そもそも3枚目の段階でユーザが選択したアイテムを
Vistaエクスプローラは選択対象と看做せていない。
XPでできていることが
Vistaではできていない。
コレを
「This behavior is by design」と言う事は流石にムリでしょう。
コレを
「by design」と言うならば、それは完全な
改悪です。
ついでに曝け出すと、私はこの
「bug」によって3度ファイルを消失してます。
最初はVistaのユーザフォルダ直下に存在する
”ダウンロード”フォルダ。
何時消えたのかも何故消えたのかも判らない。知らない間にフォルダが消失してました。
よって
「bug」のせいで消えたとは証明する事はできない。
が思い当たる節(↑で示した操作をした記憶)があるので恐らく間違いないです。
2度目は
「スケさん」のソース。
これは消えた直後に気付いた。が何故消えたのかは判らなかった。
幸い直近のバックアップがあったので被害は少なかったですけど。
最後が
「Binary Header Viewer」のソース。
これはかなり前に開発したソフトだった。ので、バックアップは既に整理して削除していました。
そして、
2007/11/11の雑記公開に当りファイルを整理をしていたところ
「bug」に見舞われました。
この段階でVistaエクスプローラが不可思議な動作をしている事にとうとう気付いた。
その不可思議な動作が、先に述べた
「bug」である事にやっと気付いたのです。
:
現時点では幸いにもVistaはそれほど普及していません。
そのため
「bug」の被害は顕在化していません。
でも、時と共にVistaの侵食は確実に進んでいくでしょう。
それがMSの意向でもありますから。
ただそうなった時、この
「bug」がどうなっているか非常に気になります。
「fixed bug」となっているならば問題は無いでしょう。
でも、
「by design」と化している or
放置されているようだったら…
本当に訴訟する人が出てくるかも。
| ※1 |
症状発生条件をもう少し詳しく述べると、
『アイテムが存在する行上から範囲選択処理を開始すると症状が発生する』となります。
下記図で示すと、赤枠で囲まれた部分から範囲選択処理を始めると症状が起きます。

尚、「撮影日」「タグ」「評価」という”低脳さ全開”の項目がデフォルトで表示されてますが…
ココでは深く触れません。vistaにとっては"普通"の事でしょうから。
|
2007/11/11
ソフト公開第三弾
『Binary Header Viewer』
実行ファイル ソース(VC++8.0 sp1)
まず最初に言っておかなければなりません。
ソースはありません。消失しました
Windows Vista Explorerの仕様、というか損害賠償モンの Bug のせいで消え去りました。
即リカバリソフトで復旧を試みたのですが…ソースをSystem(OS)と同じドライブに置いていた為即効で上書されてました。
そういうワケでソースを公開できなくなりました。(ソース消失するの何回目だよorz>俺)
この Vista の腐れ仕様については次回更新時に愚痴る予定デス。
話を戻してソフトの説明。
『Stirling』から
基本機能以外+編集機能を外して
対象ファイルの先頭2024ByteだけをLoadするようにしたもの
です。
なんかもう…直球で説明しちゃいました。
どうでも良い感満載でスミマセン。
で、どうしてこんなソフトを組んだのかというと…
仕事の関係でそういうソフトが欲しかったからです。
:
スミマセン。テンション低過ぎでスミマセン。
100M超Byteのファイルの先頭1KByteを見たいのだけど『Stirling』だと100M超全てを読込むので時間が掛かる、というのが理由です。
これは『Stirling』が悪いのではなく、私の求める機能が特殊だっただけですね。
ソース無しで実行ファイルのみ公開なんてしても企画的に無意味ですが…
とりあえず
「既存の未公開ソフトを公開」企画はこれで終了です。
ホント最後までgdgdでスミマセン。
2007/09/18
ソフト公開第二弾
長く引っ張るようなネタでも無いので第2、第3とサクサクといっちゃいましょう。
『starting war』
実行ファイル ソース(VC++6.0 sp6)
私は現在、仕事場で2台のPC(デスクトップ and ノート)を作業用マシンとして与えられています。
この内デスクトップPCは、CPU:Pentium3 500MHz、メモリ:256MB、OS:WinXP、というspecです。
CPUはともかくメモリが足りません。ハッキリ言って遅いです。激重です。
また、この糞specマシンは仮にも会社の業務で使用しているマシンです。
ウィルス対策、スパイウェア対策ソフトは当然ブチ込んでおかなければなりません。
また、ISO認証等の関係もあり、ソフトウェアライセンスを監視するソフト等もブチ込まれます。
その結果どうなるか…
PC起動時、阿鼻叫喚の巷と化す事になります。
spec不足でOSが立ち上がるにも四苦八苦するような状況の中、ウィルス対策、スパイウェア対策、
ソフトウェアライセンス監視ソフト等も
「我先に!」と走り出します。
最早どうしようもありません。起動後15分はフリーズ状態です。
「もうやめて!とっくに糞specマシンのライフは 0 よ! 」
という杏子さんの叫びが何処からか聴こえてきそうです。
と長い振り
(<<サクサク行くのちゃうんかい!)を終えたところで
『starting war』の説明に入ります。
機能的にはランチャーソフト?となるのでしょうか。
実行すると、登録されているソフトを順番に起動してにタスクバーに格納していくだけです。
まず、自分が起動したいソフトを付属の
config.exe を使用して
『starting war』に登録します。
そして
『starting war』のショートカットをWindowsの「スタートアップ」フォルダに放り込みます。
これだけでOKです。
これで、今までは起動後15分はフリーズ状態でイライラが募るノミであった状況が変わります。
「ライフがゼロォ?だったらマイナス値に突入していけ。甘えるな!」
って感じで
『starting war』が他に負けじ、と必要なソフトを立ち上げていってくれます。
これにより
「私は糞specマシンに相手にされない要らない子」感が幾らか緩和され、
なおかつ
S 気のある人ならば在る種の満足感が味わえるかもしれません。
ん?それだけですよ。ぅん。それだけだよ。それだけのツールですが何か?
:
特に問題は無いですね ^-^
では次回「第三弾」(公開日未定)でお逢いしましょう。
尚、今回は
「Opera (*´_ノ`)b GJ!。APNGのchunk公的化も時間の問題だろ」記念真紀子でお送りしました。
無理やりにでも理由を作らないと中々更新に時間取れないね…
2007/08/20
ソフト公開第一弾
まず最初に紹介しておきたい格言があります。
「名前なんて飾りです。errorい人にはそれがわからんのですよ。」
含蓄のある言葉ですね。
でわ本題に入っていきましょう。
『決まった時間に○○をするスケさん』
実行ファイル ソース(VC++8.0 sp1)
簡単に説明すると、
予め登録しておいた日時になった際にウィンドウを出して通知してくれるツール
です。
名前は、今回公開するに当たり
パパッと熟考して決めました。
人は仕事のオン/オフに関わらず、日時に縛られて行動せざるを得ない機会が多々あります。
□□に
○○する予定がある。
■■に
●●しなければならない。等ですね。
ただ、人の半分は”忘却”でできています。
この事実は身分の貴卑を問いません。
小学生が
「宿題を忘れてごめんなさい。」、と涙を流して謝る事もあれば、
エラい人が
「記憶にございません。」、と神妙ッポイ顔つきで遺憾の意を表明する事もあります。
そう。これらの事からも判るように、”忘却”は人のsagaなのです。
つまり、
『今までは翌週月曜日に提出だった作業報告書だけど、今回からその週の金曜日に出してね(はーと)』
なんて突然言われてもダメなんです。
人である以上、金曜日に提出するのを忘れたとしても…非難してはいけないのです。
でもまぁ…実際問題、忘れたら非難されるでしょうね。
エライ事になっちゃうでしょうね。
そんなエライ事態を起さないためにこのソフトを組みました。
正確にいえば、一度エライ事態を起しかけた為にこんなソフトを組みました。
似たような境遇に陥っている方、使ってみてはどうでせう。
2007/08/01
vectorから場所を借りている
#ガラクタページの更新が激しく停止中…
ていうか、ほぼ一年間更新無しで廃墟化しかかってます。
そいうわけで
『内容は兎も角、最終更新日時だけでも更新しよう』と足掻く事にしました。
で、どう足掻くのか?
はっきりいって更新するほどのネタは無い。
無いんだケド更新したい。場を借りているvectorへの後ろめたさもある。
:
ならばいつも通りのあの手段。
「Jokeソフトを公開して茶を濁す」という手しかない!
駄菓子菓子っ!! 俺は今までにこの手段を連発してきてしまっている。
『natm』は
恥ずかしいメッセージが満載のソフト として初公開した。
どっかのソフトレビューサイトで
「機能はともかく、メッセージは一見の価値有りだ」
みたいな紹介をして頂いた時は、達成感を得ると共に恥辱の念も得た。
『送るせにょう』は
右クリックから「送」る位しか使い道が無いような低機能ソフト。だから名前が「送るせにょう(専用)」
という感じで、最初に決まった事は
”名前”と
”低機能”、というソフトだ。
しかも当初は画像ビューワですら無く、DirectShowを利用した動画ビューワ
※1にする予定であった。
つまり、今回も
「Jokeソフト公開」なんてするならば、それは二番煎じならぬ三番煎じとなるわけで…
些少ではあるが、良心・誇、というものが俺にも残っていたので今回は止めておきます。
じゃ、ど〜するか?
…ど〜するも何も既に選択肢は一つを残して壊滅している。加えて…ぶっちゃけ気力も無い。
という事で
「既存の未公開ソフトを公開」という選択肢を取る事にしました。
自分のためだけに作ったものなので程度の保障はできませんが、Jokeソフトを公開するよりはマシでしょう。
ちなみに今週末から随時公開していく予定。
(本当は区切りが良いので今日にしたかったのだけど…ページを更新する気力ががg)
第一弾のツール名は
「決まった時間に○○をするスケさん」。
ソフト詳細は次回更新時に。
一応、第三弾まで予定してます。
| ※1 |
DirectShow技術を利用すれば「Windows Media Player(ver6.4以前)」程度のものであれば簡単に作れます。
動画再生に関する大部分をDirectShowが勝手にしてくれます。開発者がすべき事はUIを用意する程度です。
つまり、開発者にとっては労せず益(それなりのモノ作ってるじゃねぇか!とユーザに思わせる)をもたらせてくれる便利なヤツです。
ただ再生処理に時間が掛かるので、「右クリックから送る」専用ソフトとは相性が悪いためボツとなりました。 |
2007/05/22
継続は力也
初代ストリートファイター2、餓狼伝説が全盛の時期に自分は2D格闘ゲームにハマッていた。
休日ともなれば一日中ゲームセンターで過ごす事が当然の行動であった。
その頃の2D格闘ゲームは対人戦がメインではなくCPU戦をどれだけ圧勝するかが価値だった。
ベガ様をさも当然のように完封し、エンディングが始まった途端
「そんなものは見飽きた」
と言わんばかりに席を発つ行動がステータスであり、
ギース様との対戦までゲームを進めて、敢て負け、continue可能状態のまま席を発つ事が人の器の大きさだった。
※1
また、”防御を考慮せず只管攻撃ボタンを連打する戦い方”は滑稽なものであり、
そういう戦い方しかできない者達は鼻で笑われても仕方が無いと捉えられていた。
| ※1 |
当時地元のゲーセンでは自力でエンディングまで辿り着けない者が結構いた。
そういう者達は、最終戦近くまで進んだ状態でcontinue画面で放置しているのを見つけると、
勝手にcontinueしてその段階からエンディングを視ようとしていたのだ。
ちなみにこのゲーセンは周りに競合店が無いのを良い事に、難易度を高く設定し客の回転を速くしていた |
で…突然話が変わるが5月のGW終盤、自分は激しく暇を持て余していた。
あまりにも暇だったので友人の家に突撃すると
「じゃ、いい加減このゲームをPlayしろ!」
とTYPE-MOONの『
月姫』『
歌月十夜』『
MeltyBlood(+Re Act)』を渡された。
※ 前々から「Playしろ!」と恫喝はされていた
自分はゲーム性を重視する嗜好故、ストーリー性重視のゲームを避ける傾向にあったのだが…
他にやる事もなかったので遊んでみた。
結果、何故か友人の部屋にあったハズの月姫関係のアンソロ本等が自分の部屋の棚上に詰まれていたりする…
まぁ…5、6年の遅れはでたが、友人の思惑通りになってしまったのであろう。
で、今回借りた内の『MeltyBlood』というゲーム。これは2D格闘ゲームである。
自分はPlayStationを最後にコンシュマーゲーム機から離れ、
また学生卒業と同じくしてゲーセンからも遠去かったため、2D格闘ゲームに触れるのは久々の事だ。
それでも自信はあった。
この手のゲームは楽勝でクリアできるという確証じみた思いがあった。
『
昔取った杵柄』
というヤツだ。
なので、当然の如く難易度をMAXに設定しPlayを始めた。
が、おかしい…
ただコントローラを握ってゲームをしているだけなのに、自分の額や掌には汗が滲んでいる…
画面上には勝利のポーズを採っているCPUキャラが幾度と無く表示されている…
そして、画面上では…猪突猛進を繰り返し只管必殺技を連発するだけの自キャラが動いていた。
時の流れとは残酷である。
その動きが滑稽であるという判断を頭脳は下しているのであるが、
その滑稽な行動に依って生まれる結果こそが今の自分に出せる最高のパフォーマンスなのである。
昔のようにスマートに勝とうと動くと…何故か自キャラが簡単に寝転がるのだ。
『
継続は力也』
きっとこの言葉を信じて生きるのが成功への道なのだろう。
たかがゲームでの出来事なのにちょっと考え込んでしまった週末だった。
2007/04/16
去る 4/8 に大阪府でも選挙が行われた。
が、政治屋共の選挙活動のやり方といったらもう…酷い有様だった。
3月31日(土) AM 9:00 前
拡声器を持った政治屋(所属政党未確認)が出現。心地良く寝ていた所を叩き起こされる。
政治屋は10分程で消え去ったが…花粉症のせいで二度寝はできず、結局確保できた睡眠時間は約6時間。
平日に溜めた睡眠不足を休日で解消する生活を送っている自分には致命傷になりかねない。
4月1日(日) AM 10:00 前
共産党の集団が現れる。もちろん拡声器を装備している。
政治屋5人ほどの所為によって少なくとも30分以上に渡って騒音攻撃に晒される。
確保できた睡眠時間は約6時間。
睡眠不足により体調がツライのでJRAのWINS道頓堀に向かう予定をキャンセル。
花粉症の症状が治まった段階で二度寝しようとするが…政治屋の定期的妨害により不可。
友人に頼んで産経大阪杯の馬券だけは購入して貰ったが…掠りもせず。
ヤリ場の無い怒りのみが溜まっていく…
通常であれば週末で20時間程の睡眠を稼ぐハズが…この週は60%しか稼げず。
当然睡眠不足を解消できるワケは無く、翌日以降「陸に打ち揚げられた鯖」状態になる。
4月7日(土) AM 11:00 前
当然のように
共産党の集団(拡声器装備)が現れる。
で、当然のように俺を叩き起こす。
殺意で人を殺せれば…
それでも、今回は
共産党の出現が遅れたため8時間弱の睡眠は確保できた。
が…それは
共産党が俺の元に現れる前に他所で猛威を振るっていただけの事だろう。
他の人が犠牲になってくれたおかげで今回の睡眠時間を確保できた。
決して
共産党が
住民の事を考えて活動時間を遅らせたワケでは無い。
ちなみにこの日は
共産党に限らず政治屋共が大発生。
20:00頃まで
「名前+よろしくお願いします」連呼攻撃が収まらなかった気がする。
という訳で、恐らく俺以外にも多数の被害者がいるであろう政治屋共の騒音問題についてだが
ノー選挙カー:「騒音、排ガス」一掃へ…推進ネット設立
という動きが一部政治家の間から起こっているそうだ。
※拡声器禁止も謳ってくれると嬉しいが…
今更感はあるが、
拡声器を持って騒音を撒き散らす事を非常識だと認識できない政治屋
が多数いるのが現状なので、この動きが選挙活動の主流と成ってくれる事を切に願う。
特に
日本共産党大阪支部の連中はこの騒音問題について良く考えるように。
お前等は前回の選挙でも同じ愚行を犯していた。
2007/03/28
MNG or
mPNG or
APNG?
この3つの単語は何か?と言いますとPNGをアニメーション表示させるための規格の名前です。
アニメーションGIFの後継となるであろう画像形式と言えば単純で判り易いでしょうか。
正確に言うと、現在認められている規格は
MNG のみで
mPNG、
APNG というものは公認の規格ではありません。
ただ
MNG という規格は理想主義者共が己の自己満足を満たすために作った規格と言っても差し支えの無いシロモノです。
自分はかなり以前の段階で見限りましたし、実際(一分野のみを見るのではなく全体的に見れば)現在も普及していません。
ですが理想主義者共は
MNG に固執し、世間の望む意向を無視し続けていました。
それが最大256色しか使えないGIFが現在でも多く使われている現状に繋がっています。
で、現実を省みない理想主義者共に対して不満を持つ人達も当然居る訳です。
現在その先鋒を務めているのが
Mozillaです。
2003/5/19の雑記でも書いていますが、Mozilla はこの段階で
MNG に三行半を叩きつけます。
そしてその少し後、
APNG 規格を現場レベルから提唱する事になります。
「GIFでできるアニメーションを、GIFの変わりにPNGやJPEG形式のイメージを使って行おう」
単純に上記の言葉を一直線に追いかけるだけでも良かったんじゃないのか。
APNG は正に上記を実現する規格でしたが…
PNGに関する実権は理想主義者共が握っているため、この時は速攻で潰されました…
ですが、最近また Mozilla 側が
APNG に関して活発に動き出しています。
恐らく理想主義者共に
APNG を認めさせる事は今までの経緯(
APNG を認めたくないからといって、今更
mPNG なんてモノを出してくる位だから…)からすると難しいです。
ですが、以前とは異なり今の Mozilla には Firefox という武器があります。
全世界の25%を超えるシェアを持つブラウザが
APNG に対応すれば、例え非公認規格だとしても近い将来デファクトスタンダードとなれる可能性があります。
今回 Mozilla 側には引いて欲しくありません。いや引く必要は全くありません。
この期に及んでも
MNG などという既に”死に体”の規格にしがみ付くのは愚かな行為ですから。
MNG is dead, long live APNG
現場レベルの多くの人はこの言葉を支持している(ハズ?)
mPNG の話を全然してませんね…
んと…もはや MNG では戦えない、と薄々と感じ始めた理想主義者共が APNG の対抗としていきなり持ち出してきた規格が mPNG だね。
APNG で良いじゃん。 (゚听)イラネ
| ※ |
これは、かつて MNG を支持し MNG 作成GUIアプリケーションを開発しようとまでしたが、余りの仕様の複雑さ故
「全ての仕様を満たすMNGを作るならユーザにChunkの知識はもちろん並び順レベルまで意識させなきゃならないじゃねえか!
そんなもんツールってレベルじゃねぇぞ!」
とブチ切れた過去を持つ人間が書いた雑記です。多分に自感情が入っとります。 |
2006/12/15
親付き添えばベンチ安全 1歳児転落死で逆転敗訴
一歳7ヶ月の子供を屋外で放置していたら勝手に高さ40cmのベンチに登ってしまい不運にも転落した。
という保護者の
保護責任怠慢と考えられる要因により子供が亡くなり、
その責任をベンチ管理者の
市に転嫁し
約5100万円 の賠償を求めたという

っていう裁判があった。
その結果、地裁が
約1200万円の支払いを命じる判決を出した。
っていうこれまた「おまえは何を(略」と言いたくなる裁判の控訴審の記事です。
顛末を載せると
原告逆転敗訴の判決を高裁が下すという当然の結果が出ています。
地裁の判決なんかあって無いようなものだと言っても
高裁の中の人もこんな当たり前の判決を原告逆転敗訴って形で出さなきゃいけないなんて…
ほんとお疲れ様です。
そういえば…
最近京都だかどっかの地裁で唯の技術開発者に対して有罪の判決を下していた
裁判があった気がする…
ほんと大変ですね…
2006/08/03
現在 03:16
本来なら雑記など書いている余裕は無く明日に備えて寝なきゃいけないんだが…
あんな結果提示されたら書かなしゃーねぇだろ!!
公正にみれば明らかに勝ったのはランダエタだ
1ラウンドにいきなりダウン喰らって…
決定的にポイントを取ったラウンドも作れず…
終始手数では負けていた…
なのに勝利者は日の丸
ホームタウンデシジョンとしても余りにも劣悪な判定によって王者になったのは…日の丸
新たな王者誕生おめでとう 日本ボクシング界
大晦日が無駄にならずおめでとう TBS
そして…ありがとう ファン・ランダエタ
あなたのおかげで、今回金とメディアの力でベルトを巻いてしまった男は挫折を経験する事ができた
金とメディアの力で王者なった男に、周囲の年を経た愚人共に疑問を抱くチャンスを与えてくれた
金とメディアの力に為すがまま翻弄されてきた男を救うきっかけを与えてくれた
ボクサーを止めピエロとなりかけていた男に今歩んでいる道は boxer's road では無い事を気付かせてくれた
と自分は思いたい...
書く事書いたしさっさと寝よ…
2005/10/03
プログラムの世界では著名な
やねうらおという御人がいます。
先日、そのやねうらお氏のブログで
氏の会社の入社試験問題が公開されこの界隈では少し話題になり、
期の境目で作業が無く時間を持て余している自分も挑戦しました。
で、どうやら解答の公開が
解禁されたっぽいので雑記更新のネタにしてみる。
問1.
1時間近く粘った挙句放棄した…
どうやら自分は最適化という意味を理解できていなかったようだ。
int main() { return 1 <<(100000-1); }
試験問題という言葉に惑わされた部分もあったが、これを解答と認識する事ができなかった。
関数 f() の中の少しゴチャゴチャした部分を最適化する事を求められている、と勝手に思い込んでしまった。
問2.
10分位でソースは書けた。
#include <iostream>
#include <queue>
/* 再帰 */
int w(int a[7][7], int x, int y) {
if (x < 0 || x > 6 || y < 0 || y > 6 || a[y][x] == 1) {
return 0;
}
a[y][x] = 1;
int ret = 1;
ret += w(a, x, y - 1);
ret += w(a, x - 1, y);
ret += w(a, x + 1, y);
ret += w(a, x, y + 1);
return ret;
}
/* 非再帰 */
int w(int a[7][7], int x, int y) {
int ret = 0;
std::queue<std::pair<int, int> > q;
q.push(std::make_pair(x, y));
while (!q.empty()) {
std::pair<int, int> p = q.front();
q.pop();
if (p.first >= 0 && p.first <= 6 &&
p.second >= 0 && p.second <= 6 &&
a[p.second][p.first] == 0
) {
a[p.second][p.first] = 1;
++ret;
q.push(std::make_pair(p.first - 1, p.second));
q.push(std::make_pair(p.first + 1, p.second));
q.push(std::make_pair(p.first, p.second - 1));
q.push(std::make_pair(p.first, p.second + 1));
}
}
return ret;
}
int main(int argc, char* argv[]) {
int a[7][7] = {
{1,1,1,1,1,1,1},
{1,0,0,0,0,0,1},
{1,0,1,1,1,0,1},
{1,0,0,0,1,1,1},
{1,0,0,1,0,0,1},
{1,0,0,0,1,0,1},
{1,1,1,1,1,1,1}
};
std::cout << w(a, 1, 1) << std::endl;
return 0;
}
噂によると再帰版は1行、非再帰版は4行で書けるらしい…OTL
問3.
なんてモノは存在してなかったハズだよ…
:
とりあえず今回の件は面白かったしネタにもできて良かった。
ちなみに 問1. を解けなかった時点で氏に回答をメールする事は断念しとります。
2005/03/08
#ガラクタというコーナーでWindows上で動作するフリーソフトを公開してます。
そしてウレシイ事に公開しているソフトに対しての要望依頼等を頂いているのですが…
最近全くソフトのバージョンアップを行っていません。
要望を貰っておきながら何もせず放置…ではまずいと思ったんで、とりあえず現状を公開しておこうかと。
Swell
現在貰っている要望についてはチョビチョビ対応を組み込んでます。
ただ…以下のような事がありなかなか気力が上がらない…
- 実行ファイルサイズが 1000KB を超えてしまった
- v1.11.0 を中途半端な段階(実質的にはα ver)で「メドイ…」と言って出してしまったため萎え気味。
例えば音声の含まれた swf ファイルを表示した後直ぐに他の画像ファイルを表示しても swf ファイルの音声は止まらず流れ続けるとか…
html や swf を表示している時はエクスプローラと同じ様に専用メニューを表示するつもりだったけどメンドかったので止めてしまったとか…
- 「Picasa 2 良いなぁ」とか思っている
等。ファイルサイズが
1000KB を超えてしまったのが1番デカイかなぁ。
natm
カミングアウトするとソースの一部をまた消失したんですよ…
以前消失した際に「復元」てソフトでファイルをリカバしたんですよ。
でも復元したファイルの内容がグチャグチャでダメだったんですよ。
で、とりあえず「復元」で戻したグチャグチャなソースを「natm v1.4.0」というフォルダに退けておいて組み直したんですよ。
そして、自力で組み直したソースを「natm」というフォルダに入れておいたんですよ。
4ヵ月後…
そろそろバージョンアップ作業をやっていこうと思ったワケですよ。
久々にプログラム組もうと思ったワケですよ。
で、ソースを管理しているフォルダを開いたら「natm v?.?.?」という各バージョンのソースと「natm」というフォルダがあったんですよ。
いつも作業途中のソースは「natm」ってフォルダで管理してたんですよ。
で
「v1.4.0 を作る時に作成した「natm」って作業フォルダなんていらないな」って感じで削除したんですよ。
何も考えずに…
その少し後、事態に気付いて「復元」で復活させたんですよ。
結果…
前回のように
壊滅ではなかったけれど幾つかのソースはお亡くなりになりました。
:
だが…
オレは前回とは違う…前回の悲劇を糧に進化している!!。
今回はちゃんとバックアップ取ってるから大丈夫!!!。
:
…のハズだったんだけど…「natm v1.4.0」フォルダ(グチャグチャの方)の中身をバックアップしてました。
その瞬間、自分の頬に己の右手から放たれた本気パンチが入ってました。
開発中止までは逝かないけれど時間が掛かりそうです。
学習しない馬鹿でスミマセン。
その他
特に大きなものはやってません。
という感じです。
統括すると、ダメダメのボロボロって事です…
2004/12/05
K-1 の凡勝負製造機
ある名の知れた2人のケンカ屋が殴り合いをしていた。
2人の内の1人、
α は相手を殴り倒す事を第一に考えている。
もう1人の
β は相手に殴り倒されない事を第一としている。
α は相手を殴り倒そうと攻撃をしかける。
だが、相手の
β も名の知れたケンカ屋だ。そう簡単に倒せるハズが無い。
しかも…
β は攻撃を仕掛けず防御に徹している。
この防御に徹する
β を KO する事は至極至難である事は
α も判っている。
だが
α は感じ取っていた。周りを取り巻いている観戦者達が望んでいる事を。
また
α も望んでいた。相手を殴り倒して勝利を得る事を。
だから
α は勝負に出た。大技を仕掛けた。
逃げ回る相手を有無を言わさずブッ飛ばす。そんな大技を仕掛けるしか道はなかった。
観戦している者達と己自身の望みを満たす為に。
しかし…それは
β の思い描いていた展開だった。
β は
α の仕掛けてきた大技をサッとかわすと…相手を倒そうとする意思が感じられない、
相手を挑発するためだけに思える攻撃を
パンッと単発だけヒットさせる。
そのような光景が延々と繰り返され、とうとう両者共疲労で動けなくなった。
その時、観戦者の中の1人が隣にいた仲間らしき奴に向かって大きな声で言った。
「両方動けないみたいだな。コレどっちが勝ったんだ。」と。
隣にいた奴は殊更大きな声で即答した。
「β の攻撃は当たっていたけど α の攻撃はほとんど避けられていた。これは β の勝ちだ。」と
その言葉を聞いた者達の中の1人が反論しようとした。
「それは違うんじゃないか。」と
だが、それを遮るように別の場所から複数の大きな声が出た。
「そうだ。当たらない攻撃には意味は無い。」
「これは β の勝ちだ。β の完勝だ。」
多くの者が納得できなかった。
しかし…
α の攻撃は避けられ
β の攻撃の方が当たっていたのも確かだ。
コイツ等の言葉を完全に否定する事はできなかった。
次の日、
『β が α に勝った』という情報だけが世に広まった。
昨日の戦いを直接観なかった者達は言葉通り認識するだろう。
「α より β の方が強いんだ。」と。
そして戦いを観なかった者達は
β を支持するようになるだろう。
「強い β は凄い。」と言って。
だが…戦いを直接観た者達はそうは思わない。
凡勝負製造機とでも呼んで
β を蔑むだろう。
凡勝負を何度も観させられた結果、殴り合いを観戦しようとは思わなくなるだろう。
でも…
β は同じ事を繰り返す。
そして
β の仲間達は大声で同じ言葉を叫ぶ。
「β は攻撃を避けていた。これは β の完勝だ。」と。
2004/11/08
正直、特に言いたい事などないのだが…
前回から6ヶ月以上も更新していなかったので無理やり言ってみる
Swell の画像読み込み/保存処理の DLL化
2003年の2月に
「Swellの画像を操作している部分を DLL にして公開してくれませんか?」
というメールを頂いていた。(エライ前の話しだナ…)
その時は
「時間が有ればそれも良いなぁ」
という感じで流した(DLL開発に対するノウハウも無かったし)のだが、
最近、チョットやってみようかな、と思いやってみました。
で、DLL の基本部分の設計も終わり BMP、GIF の相互変換処理も組み終えた段階で
ルーチェ's Homepage
というWebページを見つけた。
このページには、オレが作ろうとしていたモノと 96% 程同じモンが既に公開されてました。
…というワケで DLL化 計画はお流れとなりました。
今更オレが作る必要も無いです。
もし画像形式の変換プログラムで悩んでいる人がいるなら即
GOしましょ。
パソコンゲーム1
この8月にWindowsのゲームソフトを買った。
前回買ったソフトは
アリスソフトの
Rance5Dだから1年以上振りの事だ。
ちなみに
Rance5Dの前に買ったのは、
光栄(値段高すぎ+PowerUpKid でボリ過ぎ)の
三国志8か
アリスソフトの
大悪事なので(旧すぎてどちらか先か???)、ゲームソフトを買う事は年1有無の大イベントだ。
で、その大イベントで買ったゲームは何かというと
『素作りドラゴン』 by
SoftHouse Char
という18禁ゲームである。
詳しい批評は他のWebページに任せるが、はっきりいって大当たりのゲームだった。
このゲームは AVG + 育成ゲーム というジャンルに分類される。
実は、オレは AVGゲー というのがあまり好きではない。
多くの AVGゲー には複数エンディングが用意されているが、大抵全てを観る前に飽きてしまう。
だがこのゲームは 育成ゲー という側面も持っていたためか、全てのエンディングを観る前に飽きる事は無かった。
逆に全てのエンディングを見た後も 育成 のために何周かPlayした。(育成したデータは次周に引き継げる)
税込み5000円(定価じゃ無いケド)でこれだけ遊べたのだから、今回のイベントは間違い無く大成功だった。
「遊ぶゲームが無い」と嘆いている人がいるならこのゲームをお勧めする。
ただ…勧めている者が
「1年に1本ゲームを買うか買わないかという人物」という部分には目を瞑っておけ。
パソコンゲーム2
最近、オレが公開しているフリーソフト
『natm』のソースの一部を
Shift+Delete しちまった。
この事に気付くのが遅かった(HDにアクセスしまくった後だった)ので
『復元』でも回復不可だった。
取り敢えず、削除したソースの2日前にバックアップを取っていたモノがあったのでソレから復元したが、
今公開している v1.4.0 と完全に同じ状態までは戻せていないだろう。
という鬱なでき事が有り、最近はほとんどプログラミングをせず余った時間を全てゲームに費やしている。
で、今は「鬼畜王ランス」というゲームを遊んでいるのだが…誰か助けて。
このゲームには怪獣王子というキャラが居るのだが、コイツを仲間にできない。
このゲームを買ってから10回以上は創造神エンディングを迎えているのだが、一度たりとも仲間にできた事が無い。
誰か怪獣王子を確実に仲間にできる方法をマジ教えてもらえないだろうか。
ちなみに…現状を挙げておくと
| 認識している仲間になる条件 |
| ・ | ヘルマン・ゼスに攻め込む前にシャングリラのハウセスナースを解放 |
| ・ | ハニーキングを仲間にしない |
| ・ | 6ヶ月後以後の週頭のイベントでランダムで仲間に |
| ・ |
ハニーキングと会ってから1ヶ月?経過している 必要があるんじゃないかなぁ。多分。※2004/11/22 追記 |
| とった行動 |
| ・ | リーザス内乱制圧後、即シャングリラに侵攻 -> 失敗 |
| ・ | 同(1)ターンに自由都市ジオに侵攻 -> 征圧 |
| ・ | 次(2)ターンにシャングリラからの案内人 -> 1ヶ月経過 -> デスココを倒し征圧 |
| ・ | 次(3)ターンにハウセスナース解放 |
| ・ | 約2ヶ月後(LP3年9月頃)ヘルマンに侵攻、更にその2ヶ月後(LP3年11月頃)ゼスに侵攻 |
| ・ | 現在魔王の城に攻め込める位置まで侵攻(まだ攻め込んでいない) |
| ・ | 人間界は既に制覇済み |
| ・ | ハウセスナースを解放してから楽に6ヶ月は経っている |
| ・ | ハニーキングの洞窟は一度も探索していない(アルミの斧すら手に入れていない) |
| ・ | 1週に1都市のペースで侵攻した |
| ・ | 魔族の都市は、魔王の城、悪の塔含めて8都市(元ゼスの領域に4)残っている |
| ・ | 残っている魔人は、バボラ、レッドアイ、パイアール(まだ行動を開始していない)、ケイブリス、ワーグ |
| ・ | バボラ、レッドアイは経験値稼ぎのため残している |
| ・ | カイト、ケッセルリンクはイベントを利用して倒した |
| ・ | レッドアイをまだ倒していない & フリークは闘神オメガになっていない |
| ・ | シルキーはケイブリスに返り討ちに合い捕まっている(死んでいない) |
| ・ | ケイブワン、ケイブニャンは倒したが人形に変身したまま(まだ変身を解いていない) |
| ・ | 怪獣王子以外で仲間になるキャラは(篠田、ハニーキングを除いて)全て仲間にしている(どちらか選択では、レイラ、魔想志津香、パットン軍、カフェを選択) |
| ・ | 現在イベントは溜まっていない(どうでも良いイベントばかり起きる) |
| ・ | リーザス内乱制圧後から魔界中域に侵攻までの間、イベントキューには絶えずイベントが溜まっていた |
| ・ | ゲンフルエンザ、ピンクのうし、ミル大人、メルフェイス・カフェ解呪、五十六出産、リセット成長、ザラック死刑、加藤疾風追放…等現時点で可能なイベントのほとんどは完了 |
| ・ | ステッセルはワーグに殺されている |
| ・ | ハーレムにはアナセル(臨時徴収してないだけ)、ワーグ、あおい(更生中)以外のストーリ進行上で可能な全員入っている & H可 & 香姫は5回H済み |
| ・ | イベントが溜まっていない状態でロードを100回近く繰り返してみたが怪獣王子イベントは起きなかった(確率が低いとは聴いているが…いくらなんでも…と疑心になった) |
関係無さそうなのもかなり含んでますが状況を挙げてみました。
気長に待ってますんで分かる人がいたら是非掲示板等で教えて下さい。
2004/05/10
Winny開発者逮捕
さすがは
あいてぃ先進国を目指す日本国です。
えらい人達はP2P技術は悪と判断したようです。
こんなとんでもない行動を起こしたのは世界中で日本が初めてだそうです
あいてぃ先進国を目指す日本国でないとできない事です。
ということで、日本は
料理包丁を作るとタイホされるかもしれない
車を作ってもタイホされるかもしれない
という国になることができました。治安がますます良くなることでしょう
で、自分の事に目を移してみたんだが…
もしかしてオレが公開している「Swell」もヤバイのか?
厨が「Swell」でエロいデジタル画像を見て現実世界で行動を起こす…
これ、警察のえらい人達の理論では性犯罪の幇助になっちゃうよ…
「デジタル画像を表示するソフトがあったから厨房がエロイ画像を見れてしまった。
その結果性犯罪に走ったんだ」
って。
裁判官さん、えらいけーさつの人達の暴走を窘めてやってください。
日本国が世界のお笑い国家とならないように。
2004/03/15
このページは元々は Wizardry をメインにしたページで、
Wizフリークの増殖を促すことを目的として立ち上げられたページです。
が…、 Wizardry に関するコンテンツの更新は2001年10月を最後に途絶えており、
現状は Wizardry に関するページとは言い難い惨状です。
で…現在はというと趣味で作ったWindowsソフトの更新がメインになっており、幾つかソフトを公開しています。
その中の1つに
natm というソフトがあるのですが…実はこのソフトはかなりふざけて作ったソフトです。
機能自体はアニメーションGIFの作成が目的のソフトなので問題はありません。
問題は
natm が表示するエラー or 確認メッセージにあります。
例えばエラーメッセージの1つに次のようなものがあります。
「隊長ぉ、もう無理ですぅ。このままじゃ・・・壊れチャイ・・ますぅ〜」
これは設定内容がおかしくてGIFを作成できない時に表示されるメッセージです…
イッてます。かなりアチラの方向へイッてます。
こんな感じの結構恥ずかしく、ふざけたソフトです。
元々は友人仲間に頼まれて作ったソフトがベースなので 『遊び』を幾つか入れてました。
突然10秒ほど入力を受け付けない状態になるようにしたり、(さすがに公開版では削除してますよ)
起動時に「ウィルスに感染。HDのフォーマットを開始!」というメッセージを出し、HDをガリガリ鳴らせたり。(同上)
このメッセージも 『遊び』の一つでした。(ちなみにメッセージを考えたのは私では無いです。)
また natm と言う名前は
「 Neta(ネタ) Anime wo(アニメを) Thumbnail de(サムネイルで) Motion siyo(動かそう)」
の各句の頭文字をとったものです。(画像板に住むヤツにしか意味通じねえんじゃ…)
v1.0.0 を公開した当時はかなり精神が汚染されていたものと思われます。 |
で、先日一通のメールを頂きました。内容を要約すると
「natm を使わせてもらっています。ありがとうございます。」
というもので、とても丁寧に書かれたメールでした。
…複雑な気分です。
こういうメールを頂ける事はとれも嬉しい。(ホントに嬉しいのですよ)
ただ、
natm に対してという点で恥ずかしかった。
加えてメールアドレスには @ マークの前に女性の名前らしきものが含まれていた…
:
もう羞恥プレイには耐えられません。
natm を使っている人が少なくても一人居ると判明してしまった以上
あの恥ズいメッセージを晒し続ける事はもう無理。
という事でメッセージを修正した v1.0.1 を公開しました。
natm を使っているような奇特な人がいるなら、おとなしく VersionUp して下さい。
幾つか機能改善もしてあるから。
2004/03/03
典型的な中小企業経営者には捕まるな その7
8月上旬…
前話までの嵐も乗り切り自分はのんびり過ごしていました。
ただそれは嵐が過ぎ去ったためのんびりできていたのでは無く、台風の目に入っていただけの事でしたが。
夏季休暇を3日後に控えたある日…
典型的な(ry にいきなり話を振られました。
「Gakkun君なぁ、夏季休暇が明けた後の21日から○○会社※1へ常駐の外注として行ってもらう予定なんだ。
そこで明日面接のため○○会社に行ってきて貰いたいんだけど。」
ゴゴゴゥゥゥゥゥゥゥー
台風の目に居られたのはわずか3日でした。
明日面接って急展開しすぎです。突然決まった話じゃ無いでしょうに…
そもそも経験3ヶ月、しかも上に誰かが付く事も無く我流で仕事してきた人間を派遣するんですか。
それ以前に経験3ヶ月の人間を受け入れようという会社があるの?
オレには不安と疑問が次々と出てきていたが
典型的な(ry は続けて言った。
「明日面接に行く時この履歴書を持っていって。」
渡された履歴書をオレが見る前に
典型的な(ry は言葉を続けた。
「Gakkun君は経験3年位の実力があると思うんだ。そこでなぁ、君は経験3年という事にしてあるから。」
:
…はっ…はっはっは!…何を言ってるんだアンタ様は。
僕の経験は3ヶ月ですよ。3年になるハズが無いでしょう。
「してあるから。」なんて言われてもできるワケがなんでしょう。
ハッハッハ…まったく………。
どこまで低脳なんだ、この野郎。
そりゃもうアンタ、猛抵抗ですよ。
何たって
経歴詐称です。経歴詐称って訴えられますよ。
それに経験
3ヶ月の人間を
3年と詐称して派遣に出して無事仕事が完了するとは思いません。
というか
典型的な(ry は怖くないのでしょうか?
能力の有無は別にして一応彼が最高責任者です。責任取るのは彼なんです。
典型的な(ry はその辺をどのように考えているのでしょう。
「いや、ホント大丈夫だから。そんな難しい作業じゃないハズだから。大丈夫だって。」
もうどうしようもありません。何も考えていません。
金以外の事は全て二の次になっているようです。
相手会社との信頼関係や、詐欺をする事で負うリスクよりも目の前の金が一番のようです。
典型的な(ry は
『人としての最低限の常識』というレベルで既に我々とは異なる価値観を持つ
存在のようなので、話し合うだけ無駄だという事をこの時完全に悟りました。
「とりあえず…言う通りします。作業はどんな事やるんですか?」
典型的な(ry を理解する事を諦めたオレは少しでも不安を取り除きたくて作業内容を尋ねた。
この時点のオレはC++(MFC含む)に対する知識、経験が圧倒的にありません。
よって作業内容がC++(MFC含む)だったりすると死を見る事は明白です。
よってこの点だけは確認しておきたかったのです。
「作業内容はCですか?C++とかMFCだといきなりは無理ですよ。」
「うん、Cと聞いている。それに今回相手方は経験の浅い子達を集めてるから…育てながらやっていくのじゃないかな。」
典型的な(ry は信用するに足らないサル以下のオヤジである事は判っていたのですが、
それでもオレはこの言葉にすがる事にしました。
※2
だってそうするしかないから…
で、面接も無事?
※3終わり自社での最後の作業日となる20日の定時を迎えました。
帰ろうとすると
典型的な(ry が話し掛けてきました。
「話しあるんだけどちょっといいかな?」
「定時過ぎてから言うな。ボケ」と思いましたが仕方ないので話を聞く事にしました。
「ウチは基本的に1年目は残業手当ては無しだけど、明日からは残業した分手当てが出るから。」
別に感動する事でもありません。ごく当たり前の事です。出さない事が
法律違反です。
「それでなんだけど…、残業手当てが出るから来月からは住宅手当は無くなるんで。」
…もう誰か助けてください。
典型的な(ry の言っている事が片っ端から理解できません。
『残業手当が出る = 住宅手当が出なくなる』
この式の左辺と右辺がどうして
Equalで成り立つのですか?
Equalを成立させる方式がオレの知らないところに存在しているのですか?
:
イヤ、もういいヤ。考えるのは止めよう。
典型的な(ry を理解しようとする事など…。時間の無駄だ。
それにヤツと同じ空間に居続ける位なら外に出る方が遥かにマシだろう。
つーか、この仕事が終わったら辞めるのだからどうでもいいんだ。
:
という事でオレは経歴詐称までさせられて外に出される事になった。
以降3年以上経った今も外に出っ放しで会社には戻っていない。
戻りたいとも思わない…
:
以上で『典型的な中小企業経営者には捕まるな』は終わり。
この話はただ愚痴を連ねたものになちゃったけど、
『でき得るならなるべく社員の立場が守られている会社(=大きな会社)に入れ』
と言うのがオレの言いたかった事。
「株式会社では無く敢えて有限会社を選択」なんて事するとオレと同じ悲劇を見るかもしれないよ。
このような会社は現実に存在しているのだから…
| ※1 |
日本を代表する大きな会社です。オレならこの会社を詐欺るような行動はようしません。 |
| ※2 |
この言葉にすがった結果…
| うん、Cと聞いている |
作業内容はC言語で組まれたプログラムA(70000 step)、B(20000 step)をクラス設計し直してMFCで組みなおす。
つまりおもいっきしMFC、100%嘘でした。 |
育てながらやっていく
のじゃないかな |
作業担当はオレ一人。ソース解析、クラス設計(未経験)、コーディング、スケジュール管理(未経験)、全てオレ一人。
客先との打ち合わせも経験3ヶ月のオレがメイン。(無茶しすぎ…)
つまりオレができなかったらプロジェクト破綻、100%嘘でした。 |
| その他もろもろ |
・典型的な(ry に作業内容がMFCだったと文句を言うと、「それはウチではどうにもできないから△△※に直接言ってみて」と他人事。
※下の方の派遣先関連図参照
・典型的な(ry にこのままだと作業完遂は難しいと報告すると、「それもウチではどうにもできないから△△に言ってみて」と他人事。
結果、特に手が打たれる事も無くほっとかれ最大12日の遅れが発生。何度「あの履歴書は嘘」とカミングアウトしようとした事か…。
・典型的な(ry に「ソース解析で解らないところがあって…」と相談すると、「ソース持って会社にこれるか?」と一応肯定的な反応。
で、業務終了後ソースを持って会社に行き典型的な(ry にソースを見せると
「このプログラムはどこからスタートするのかな?」「CreateWindow()ってウィンドウ作ってるんよな?」発言。
Windowsプログラミングが全く解らないなら「業務終了後会社に来い」なんていうなよ。ホント無駄足だ…。 |
|
| ※3 |
履歴書の履歴を逆算していくと自分は17歳で大学に進学している事になってた。こんな履歴書で良く通せたな…。 |
| 『冷戦の開始(8月以降)』結果 |
| 最終報告: |
ここまで書いといて何だが…まだ会社を辞められないでいる。それは会社を辞めるのが惜しいからではない。

現在のオレは上図のような立場で仕事をしている。もう雁字搦めで辞めるのは簡単ではない。
また、典型的な(ry と顔合わす機会が年に数回だけなのでストレスが溜まっていない (藁
事もありまだ辞めてはいないのだが…辞めたいという考えは変わっていない。
せめて他派遣会社のヤツが貰っている報酬の80%程度でも貰えれば…って有り得ないな。
諦めて転職サイトにでも登録しとこ。 |
|
| 忠誠度: |
-231 ※入社して5ヶ月 (典型的な(ry と交わす言葉は最早無し)
|
|
2004/01/05
昨年末から1/4までの事項について感想を…
・
β反 ネ申 イ憂 月券
低脳なオヤジが低脳なオヤジ故の己の低脳さを曝け出す金目当ての低脳な行動を取った結果、
「『β反 ネ申 イ憂 月券』という商標登録は無効」
という低脳なオヤジ以外には当然の如く予想できた審決が下り
「大人しく和解しておけばよかったのに」
と世の多くの人にその低脳さを哀れ、諦めさせると共に、多くのβ反 ネ申ファンに敵として認識される要因となった事件。
尚、このオヤジはこれだけの低脳さを曝け出しているにも関わらず己の実名を公表するという、
某巨大掲示板住人も真っ青な行動を取った事から『本物』であると思われる。
・
12.31
格闘技三昧で良い1日でした。
正直12.31にPRIDEまで参戦してきた時は
「供給過多になるし出せるカードも負けているのだからPRIDEは引けよ」
と思ったものだが、そのPRIDEが1番面白かった。
DINAMATEもアレでOK。楽しめた。
問題は猪木…というより日テレ。
DINAMATE(TBS)はK-1。 男祭り(フジ)はPRIDE。 ボンバイエ(日テレ)は猪木(新日本プロレス)
という事で手持ちの札が(プロレスファン以外には)価値の無いモノが多かったのは仕方が無い。
また「ミルコvs高山」が消滅した影響もあったかもしれない。
でも今回低迷した最大の原因は日テレにある。
だってボンバイエの宣伝をほとんどしなかっただろ。
オレのケースで言うと、12/20以降に深夜枠で流していたCMを1回と、
大会直前に猪木が宣伝のため番組に出まくっていた事位しか知らない。
しかも出場する選手に関する情報はテレビからはほとんど得られなかった。
こんなやり方じゃ新日ファン、いや猪木信者しか食い付かんわな。
TBSは「曙vsボブ・サップ」、この見出しだけでも客が付くカードなのに特番を組んで宣伝した。
フジはSport等で出場する選手の紹介に結構な時間を割いていた。(W-1もこれ位真面目にしてくれてれば少しは…)
日テレはもっと真面目にして下さいね。
LEGENDに続き今回もコケたのは日テレ側にも何らかの要因があるハズですから。
後、ボンバイエでヒョードルと戦った永田について。
実は今回ヒョードルとのカードが決まった時点で、オレが永田選手に対して持っていた負の感情が少し消えた気がする。
「総合で秒殺されたヤツがトップ面するな。プロレスする前に総合で勝ってこい。」
という考えがあるのでオレは永田選手が好きではない…と思っていたのだが
「1度一方的に負けた位でビビって逃げてんなよ。」
というのが本当の理由だったのかも。
・
1.4
テレ朝が放送した新日闘強導夢についての感想。
『新日かっこわるぅ〜』
12.31のDINAMATEでIWGP王者中邑伸輔がK-1のアレクセイ・イグナショフに負けたワケだが…
「レフェリーの不可解なジャッジで負けた」だの
「イグナショフが反則をした」等の事を何回も何回もしつこく流しやがったせいで興醒めだ。
1.4の時点でK-1の谷川が
「中邑vsイグナショフは無効試合」、
と発表していたのだからその事実を伝えるだけで良かっただろ。
谷川の発表と、中邑の
「イグナショフとはK−1のリングで再戦する。」というコメントで十分だった。
それなのに
「ヒクソンもジャッジに問題があったと言っていた。」等、
試合の合間毎に女々しいVTRを流して…
こんなやり方は中邑だけでなくプロレス界にとってもマイナスじゃない?
プロレスファン以外の人はこれを観てどのように感じたんだろう。(プロレスファンしか観てないか?)
次にハッスル1についての感想、って言っても結果しかしらないのだが。
とりあえずとても面白そう。地上波で流してくれないかな。
『小川vsゴールドバーグ』、試合結果のみを観ればオレの嫌悪するアメプロ(WWE)式決着になったようだが、
これだけしっかりと流れ(OHvs高田DSE)を作ってくれれば十分楽しめそう。
W-1は試合内のストーリーだけで試合外のストーリーが無かったため派手にコケたが、
ハッスル1は試合外のストーリーも作っていこうとしているので期待できそうだ。
武藤もW-1の事はスッパリ諦めてハッスルに本格的に協力したらどう?
2003/11/27
ファイル交換ソフト悪用しネットで映画公開、2人逮捕
:
そりゃタイホされた2人は仕方がないさ。完全な著作権法違反だ。
でも製作者宅を家宅捜索するのはおかしくないか?
ファイル交換ソフト自体に違法性が存在するのか?
P2P技術が悪いというのか?
P2P技術を利用したアプリを発表すると家宅捜索されちゃうのか?
今回ソフト開発者が何故家宅捜索されたのか。その点だけははっきりさせてくれ。
でも、
「ファイル交換ソフトが犯罪を助長していたから。」なんて回答はダメだよ。
そんなのはでも、
「包丁が在るから人殺し事件が起きる。」と同様に暴論すぎて話にならない。
ただ、でも、
「P2P技術が悪いのです。」と断言されても暴論すぎて話にならないが。
2003/11/06
最近とんと興味が無くなった新日本プロレスについて書いてみる。
異種格闘技戦に勝つ事で猪木はトップとなった。
藤波、長州はその猪木と戦り合う事でトップとなった。
闘魂三銃士は藤波、長州に勝つ事でトップという立場を奪い取った。
永田、中西、天山は…武藤、橋本が新日を去り、蝶野が一線から退いた為トップという立場が回ってきた。
:
興味が薄れるのも当然か。
「総合格闘技で秒殺されたヤツがIWGPの防衛記録を更新してもなぁ…」とか
「K-1で1R KOされたヤツが『野人』とか謳ってもなぁ…」とか
「蝶野の子分を脱しきれていないヤツがG1、IWGPを制してもなぁ…」とかいう問題じゃ無い。
今の新日のトップ連中は本当のトップでは無い、暫定でトップになったレスラー達だ。
これじゃ盛り上がれない。
簡単でないことは承知しているけど…、
永田には武藤を狙って欲しい。
中西には橋本を狙って欲しい。
そして天山。
G1、IWGPを制した今だからこそお願いする。
蝶野を否定し、正規軍を否定しろ。もちろん魔界は論外だ。
かつて蝶野がしたように自分以外の全てを否定し反乱を起こせ。
今のように第2位の立場を務めるのではなく第1の立場を求めて欲しい。
海外から帰国早々、長州力を顔面フォールしたあの天山広吉ならそういう道を進むべきだ。
優等生の天山広吉。
そんなものは望んでいないよ。暴れまくれ。
| P.S. |
永田と中西は借りを返さなきゃダメだ。
最悪相手は誰でもいいから総格、K-1で1つ勝ってきて欲しい。
それをしない限り何をしてもピエロで終わる。 |
2003/11/05
最近思ったこと。
S県月宮について
その後どうなったんだろう。マジでもネタでもいいから続きを観たい。
江角マキコが出演している国民年金のCMについて
取り敢えずジャロに通報しなきゃならんだろう。
ダイエー小久保の読売への無償トレードについて
潔く球団を売却したほうが良いンじゃない。>ダイエーさん
いいかげん消えてくれませんか〜。>ナベツ○さん
政治屋の選挙活動について
騒音被害で訴える事はできないだろうか。
「よろしくお願いします。よろしくお願いします。」ばかり連呼して…メチャ五月蝿い。
予定の無い休日は昼過ぎまで寝ているオレのような人間もいるんだ。
「こんな演説しかできない政治屋は犬のウンコより悪い。
犬のウンコは肥料になるが、お前らは産業廃棄物でどうにもならない。」
とでも言って気付かせてあげて。裁判官さん。
このままじゃ
産廃(惨敗)しちゃうよ。このオヤジ達。
:
『産廃』と選挙に『惨敗』する、を掛けてるんだよ〜
:
ゴメン…。反省してる…。
2003/11/01
PC壊れて自作して その2
新PCを自作することに決めたわけだが、7年の月日は結構重かった。
今の自分は
「このメーカーのモノは信頼性が高い。あのメーカーのモノは不良品が多い。」
という情報が7年前から更新されていないのだ。
この状態で状況を開始すれば、○○生命の
『堂○○生』や○○生命の
『生○○チカラ』を契約するのと同じ位の金の無駄使いをしてしまう。
なので10日程かけてじっくり情報を集め、新PCのスペックは以下のように決めた。
| モニタ |
EIZO FlexScan L567-BK |
| M/B |
GIGA-BYTE GA-8KNXP |
| CPU |
Intel Pentium 4 2.4GHz FSB800 |
| VGA |
ATLANTIS RADEON 9100 AGP 128MB(バルク) |
| Sound |
(取り敢えず)On Board |
| HDD |
IBM 120GB |
| RAM |
PC3200 DDR-SDRAM CL3 256MB x 2(Samsung純製) |
| 電源 |
星野金属 Varius2 450W |
| PCケース |
星野金属 MT-PRO1450 Solidline MaxFlow Red |
| OS |
Win98SE |
CD、FDDは旧マシンから取ってきた。
SCSI - CD-R/RW はお疲れさま。だってSCSI挿す気はもう無いし…
PLEXTOR の PX-708A 辺りを買おうと思ってる。
M/Bと電源とPCケースに力を入れました。
M/Bは
「440BXチップセットの P2B-F だから Pentium3 以上は載せられない。」というジレンマに長年苦しんだ経験から
(この時点で最新の)875チップセットを積んだ
GA-8KNXP にした。
※1
PCケースは、
「最近のCPU等は結構な熱を持つ。だから排気の優れたケースが欲しい。
よし、星野のこの夏限定モデル MT-PRO1450 Solidline MaxFlow にしよう。値は張るけど…」と決定。
電源は、
「今後の拡張に備えて450W、じゃ 星野 の新電源 Varius2 で十分だ。星野の電源は信頼性も高い。」と決まった。
後のパーツはコストパフォーマンスを考慮して決めた。
メモリはもう少し欲しかったが
Win98に 1024MB とか積んでも無駄なので、256MB x 2 のデュアルチャンネルに。
で、
8/6、
価格.comで大抵最安値を競っているパーツ販売店にまとめて発注。
来週の盆休みの終わりまでに届くと嬉しいなぁ、と思っていた。
が、そんなオレの期待を裏切る内容のメールが(盆休みも終わった後の)
8/18に届いた。
「受注していた MT-PRO1450 Solidline MaxFlow Red(Varius2 450W電源搭載) なんですが在庫が無い状態でして、
申し訳無いですが他の物に変更して頂けないでしょうか?」
在庫が無いのは仕方が無いけど…2週間も経ってからそれかよ!
「じゃ、 MT-PRO1450(ry のBlue、Black、Silverの優先順位で在る物でいいから。」と返信。
すると
「申し訳ありませんが指定して頂いたモデルは扱っていないのですが…」と返答がきた。
慌ててHPをチェックすると
450W電源搭載モデルは全て
400Wに変更されていた。
それは無いだろう、P○-S○○○○○○さん。在庫が無いっていうより取り扱いを止めてるじゃん。
「PCケースと電源は直接 Soldam から買いますんで…キャンセルという事にしてください。」
オレにはそう返信するしかなかった…。
で、直接
Soldam に注文しようとしたのだが…またまた一波瀾が。
『2003/08/09 搭載電源変更のお知らせ。
Varius2 が入荷できないため、搭載電源を Varius に変更致します。』
最悪です。今更旧電源である
Varius を買いたいとは思いません。(しかも値段に変更無し)
Soldam に電話をして
「Varius2 に戻る予定はあるのか?」と尋ねたところ
「9月上旬頃には Varius2 に戻す予定です。」との返答だったので後1週間待つ事にした。
そして
8/29、搭載電源が
Varius2 に戻っていたので注文し、全てのパーツが揃った時には
9/5になっていた。
現時点で新PCの稼動時期が予定より20日遅れている。
遅れを取り戻すために速攻で組み立てに入った。
PCケースにM/Bを取り付けて、
M/Bにメモリを挿して、
M/Bにグラフィックボードも挿して、
M/BとFAN、電源等との配線を繋いで、
HDDを繋げて…、
「良し。電源ONだ!」ポチッとな。
『ピー、ピー、ピー、ピー......』
BIOSが立ち上がらない…。
「焦ったかオレ。メモリとグラボがキチンと挿さっているかチェックだ。…良し」ポチッとな。
『ピー、ピー、ピー、ピー......』
「何ッ!なら配線もチェックだ。…OK」ポチッとな。
『ピー、ピー、ピー、ピー......』
「一気に進めすぎたか。じゃ、メモリとグラボだけが挿さっている状態で。」
『ピー、ピー、ピー、ピー......』
「オィ…、どういう事やねん。グラボか?ならグラボも抜いて…」
『ピー、ピー、ピー、ピー......』
「…メモリをデュアルチャンネルしているのがダメなんだな。そうなんでしょ。(泣きかけ)」
『ピー、ピー、ピー、ピー......』
「なら1枚挿しだ。こんちくちょう。」
・・・・・・
「BIOSが…BIOSがたった〜〜」
原因はメモリでした。2枚買った内の1枚が逝っているようです…。
さて…どうしましょう。
実はP○-S○○○○○○で買ったパーツは
9/22に届いていたのです。
動作確認期間の2週間…、過ぎてるんです!過ぎちゃってるんです。
でも、今回はP○-S○○○○○○側にも非が在るという事で…交渉です。
「メモリ初期不良のようです。動作確認期間は過ぎてますが以前のやり取りのためPCケース、電源の入手が遅れました。
その影響で動作確認も遅れました。交換の検討願います。」
というメールを送ったところ、あっさり
「では現物を送ってください。」という返信がきた。ヨカッタヨカッタ。
ただ、
「こちらで症状が起きない場合は返送料、技術料合わせて3000円頂きます。」
というプレッシャーも掛けてきたが。
取り敢えずビビッていてもしょうがないので、メモリを送った後は代金引換の宅急便が来ない事を願いつつ結果を待った。
メモリを送って5日目位までは、連絡が無く1日が終わった事に少しほっとしていた。
7日目になると、連絡が無く1日が終わると
「相手先に届いてないのでは?」と少し不安になってきた。
9日目には
「いいかげん確認のメールを出すべきか。」と少し怒りが沸いてきた。
そして11日目、帰宅後郵便受けをチェックすると箱が1つ入っていた。P○-S○○○○○○からだ。
結果は
「不良品でしたので交換します。」という事だった。
とにかくこれでやっと(本当に)全てのパーツが揃った。
ただ、時は既に
9/23。行動を開始してから40日の日数が経過していた…。
そして空いた時間にコツコツ作業し、OS周りの環境が整った時には10月に突入していた…。
何でこんなに時間が掛かったんでしょうね。
P○-S○○○○○○からの連絡待ちに20日程費やした事を差し引いても…。
オレの運が悪かった、という事で納得するしかないのか。
| ※1 |
440BXチップセットのM/Bには(通常では)Pen2 450MHz 以上のCPUは載せられない。
よって、このMBを使い続ける限り性能の良いCPUがあっても交換する事はできない。
という苦い経験があったので、この時点で最新の 875 チップセットを積んだM/Bを買った。
…のだが最近はCPUが変わればチップセットも変わる、というご時世なのでさほど意味は持たないかも… |
2003/10/19
PC壊れて自作して その1
今月、自宅で使用しているPCを新しいのに換えた。
ちなみに今まで使用してきたPCは
| モニタ |
iiyama A701-G |
| M/B |
ASUS P2B-F |
| CPU |
Intel Pentium 2 450MHz |
| VGA |
ASUS AGP-V3400 RivaTNT 16MB(バルク) |
| Sound |
GALLANT SP401(バルク) |
| HDD |
IBM 8.4GB + I-O DATA(富士通のOEM) 40GB |
| RAM |
PC100 DIMM SDRAM CL3 128MB x 2(バルク) |
| 電源 |
Seventeam ST-251HR 250W |
| PCケース |
スチールのミドルタワー(ノーブランド) |
| OS |
Win98SE |
という7年前ならまだ良かったかもしれないが、現代ではチト厳しいスペックだ。
でも、本音を言えばまだまだ買い換える気は無かった。
買い換える気があったなら、5月に
DIMM 128MB を買ったりはしないハズだ。
(それまではメモリ128MBで耐えていた)
なら何故新PCを組んだかというと…単純にぶっ壊れたから。捻りも何も無い回答だ…。
まず
7/12、モニタが
『グワ〜ン。ブッ』 という奇声を上げた後ウンとも寸とも言わなくなった。
6月頃から
『グワングワン』 言っていたが、チョップを食らわせば大人しくなって動いていたのに…。
亡くなったモノを惜しんでも復活するわけではないので新モニタを買う事に決めた。
最初は
A701-G と同じ
飯山 製のモノを買おうと考えていたのだが、ネット上の評判を調べてみると何故か宜しくない。
俺の中では
NANAO に次ぐ立場を得ていた飯山なのだが…この7年の間に何かあったのか?
とりあえず7年のブランクがある俺としては他人の評価を信じてしまうワケで…、
信念も何も無くメーカーは
NANAO に決定した。
この時点ではモニタだけを購入する予定だったので
「多少金が掛かってもイイや」 と考えていた。
だから調子に乗って
「CRTは場所取るから液晶が良いな」
「A701-G よりデカい画面が欲しいな」
という考えも実現させてしまい、結局
FlexScan L567-BK 送料、税込みで約 60000円 という買い物をしてしまった。
CGを描くわけでもないのに…これが猫に小判ってヤツ?
とにかくこれでPCは復活し、今回の出費の分は
| ・ | 週2日インスタントで済ませていた晩飯を週4日のペースにする |
| ・ | 毎週 ROTO 6 に3000円注ぎ込んでいたのを2000円に減らす |
| ・ | 毎週 JRAに寄付していた 9000円 を 4500円に減らす |
という計画を立てて取り戻していくつもりだった。
予定通りいけば、最低でも9週間程で取り戻せるハズだった。
が、その矢先の
7/26…
悪名高い富士通製HDD(型番 MPG3409AT-EF)が
『カッココン』 という雄叫びを上げると同時にOSが固まった…。
再起動する事もできないので電源を入れ直した。
そりゃ、
「スキャンディスクせぇ」て言う青画面が出てくる程度の事は予想できたさ。
でもな…、標準チェックに加えてクラスタのチェックまで強制的に始めるとはどういう事だ。
瀕死の患者が運び込まれてきた直後の緊急病院のようにヤバい雰囲気が満々じゃないか。
オレは必死に
「戻ってきてくれ。お前には20GB程のデータを託したままなんだぞ。」 と呼びかけたのだが…、
M$の用意した医者は突然手を止めこちらの問いかけにも応答しなくなってしまった。
… M$のお家芸「フリーズ」です。スキャンディスク中にフリーズしてくれました。
(今回は不治痛のせいなんだけどね)
結果、7年経っても元気な
IBMのHDDが見守る中、
不治痛のHDDは2年という短い生涯を閉じた。
中身のデータを道連れにして…。
という経緯が在り、半ばヤケぎみに新PCの自作を決断した。
ただ、この時新PCの稼動が2ヶ月後の10月まで遅れるとは思ってもいなかった…。
次回にconitune…。
2003/10/13
典型的な中小企業経営者には捕まるな その6
6月になりました。
今月からやっとまともにプログラムの仕事ができます。
ただ、仕事の内容がMFCを使用するものだったので
「class?、オブジェクト指向?、何それ??」
という、駆け出しC(C++で無い)プログラマーだった当時の自分にはかなり不安を抱かせる仕事でした。
でも自分1人で作業する訳でもないし先輩プログラマー(A)も
一緒に作業する訳だから、解からない所は聞けば良いと考えていました。
で6月初日、作業に取り掛かかる日なんですが…何かおかしいんです。
.....!!
そう、先輩Aが居ないのです。就業時間になっても先輩Aが来ないのです。
なのに、
典型的な(ry は何事も無かったかのように
「それじゃ、打ち合わせ始めようか。」
とオレに話し掛けてきているんです。
まあ、当たり前の行為として真相を問いただしたところ
「A君の新しい出向先が決まってな。今日からそこで仕事してるんだよ。」
とほざきやがった…
そりゃ派遣に出せば確実に結構な利益が上がるので出したがるのは判るけど…
こっちの仕事はどうするんですか?社長さん。
あんた先月言いましたよね。
「私(典型的な中小企業経営者)とA君とキミの3人で開発するから。解からない事はA君に聞けば良いよ。」 と
でもA先輩は外にいっちゃいましたよ。
会社にはオレ以外のプログラマは居なくなっちゃいましたよ。
※1
どうするんですか?
:
ほう、
今回が初仕事の入社2ヶ月の新人が
メインプログラマですか。
解からないけど分かりました。
仕事がぽしゃった時はアンタが腹でも切って客先に詫びて下さいよ。
もう一つ言うと、もしオレが客先の立場ならば
| ・ | SEがLISPとVBを辛うじて触れる程度のスキルしか持たない典型的な(ry |
| ・ | プログラマがMFCを触ったことの無い入社2ヶ月の新人1人 |
| ・ | この2人体制で作業する |
これらの事が判った時点で以後永久に取引を止めますな。
プロ意識のかけらも無い会社と付き合いを続けても無駄なだけだ。
この体制からは良い仕事をしようという姿勢が全く感じられないし、アンタもそんな気はないんでしょ。
仕事が有るにも関わらず、目先の派遣依頼に眼が眩んで依頼を受けちゃうアンタだから。
とりあえず、メインプログラマであるオレがコードを組めないと
典型的な(ry が腹を切ることになる。
それはそれで大いに望む所ではあったが、その時にはオレも責任を取らせられかねない(
典型的な(ry の事だから…)ので必死にやった。
MFCについて書かれた資料をあさりまくり、
AutoCADのAPIやObjectARXについて書かれた資料をあさりまくり、
典型的な(ry が書いた必要事項抜けまくりの仕様書に苦悩しまくり、
「ハードウェアキーを付けたいので調べてくれ。」
と丸投げしてきた
典型的な(ry への殺意を押さえながらも多忙の間を縫っての調査等、
普通2ヶ月の新人が一人やる内容でない作業をこなしつつ、8月初旬にはなんとか納品までこぎつけた。
だがその時には
「残業、残業ッ、また残業ぉ〜。サービス残業180時間〜。イェッ!!!」
と無意識に歌ってしまう程精神は崩壊していた。
| ※1 |
会社に残っている人員は、LISPを少し使えるだけで「自分はプログラマ。はーと」と勘違いしている典型的な(ry と、
プログラムではなくCADでの図面作成を仕事としている先輩社員が2人。
プログラムの事は誰に訊けば良いのでしょう。くくくくく。 |
| ※ |
MFC、VB、ObjectARX等所々で出てくる用語に付いて知りたい方はWebで検索してみてください |
| 『偽りの同盟(実質属国)時代 後期(6・7月期)』結果 |
| 収穫: |
| ・ |
学生4年間の授業で習うプログラム知識は、会社で1ヶ月も仕事すれば会得できるという話を実感できた。 |
| ・ |
やっぱり株式会社に入社しておくべきだったと酷く実感できた。 |
| ・ |
反典型的な(ry という点で、直ぐに他の社員と立場の上下関係無く親しくなれた。 |
| ・ |
オレが居なくなればプロジェクトが破綻する状態にも関わらず、残業手当てを払おうとしない典型的な(ry の
態度を見て、「何時でも辞めてやる、いや寧ろ早く辞めなければ。」という決心がついた。 |
|
|
| 忠誠度: |
-512(前回から-256 MAX=100として) ※入社して4ヶ月(諦めの笑い…) |
|
2003/09/16 01:27 (優勝当日に帰宅できなかった…)
阪神優勝!!!
ファミコンの初代ファミスタで野球に興味を持ち、
親父や、住んでいる地の影響で阪神ファンになってから約17年。
やっと、やっと、やっとこの時が来ました。
もう、オレを優勝を味わったことの無い阪神ファンとは言わせない。
いろいろ書きたいのだけど、酒がまわってちょっとキツイ。
だから最後にもう一度。
阪神優勝おめでとう。
後は
日本シリーズに勝利して、
千葉の低能親父との裁判に勝利すれば完璧だ。
P.S. 号外を取り損ねたのは悔しかった…。後当日に更新できなかったのも…
2003/08/10
典型的な中小企業経営者には捕まるな その5
月が移り変わり5月となりました。
五月病にかかって会社を去っていく新入社員が多々発生する月です。
自分は幸いなことに五月病にかかる事はありませんでした。
ただ、別の要因で会社を去りたいとは常に考えていましたが…
とりあえず、大型でも何でも無い暦通りのGWが過ぎた後はCADの仕事も片付いていたのでマターリやってました。
例えばプログラム言語の勉強をしたり、
PCを何台も組み立てさせられたり…
何台ものPCにOSをインストールさせられたり…
典型的な中小企業経営者の雑談に21:00頃まで付き合わされたり…
※1
「大阪日本橋に買い物があるから」と17:30頃に言い出した
典型的な(ry の買い物に付き合わされたり…
※1
:
つまり、まあ、仕事が無かった訳だ。
何故ならこの会社は派遣会社だからだ。
典型的な(ry は認めないが、その実態は派遣会社そのものだからだ。
普通の派遣会社の55%程度の給与しか社員に払っていないが、やっている事は派遣会社そのものだからだ。
会社が手掛けている仕事として、
「携帯電話、病院システム、国防関係のシステム、etcをC、C++、VB、java、etcの言語を用いて開発」
みたいな事を求人票に載せているが、実際は派遣先で自社の社員が作業しているというだけ。
「この会社自体はそんな仕事はしていないよ〜ん。派遣先でウチの社員がそういう事してるんだってさ。」
という会社なので、自社に残っている社員には仕事が無いという期間も多々発生するのだ。
まあ、この状態を続ける事は
典型的な(ry にとっても損なので、さすがに仕事を作ってきた。
「或るCADソフトに機能を追加するDLLをMFCで開発する」
という仕事で5月下旬から作業開始というものだった。
この時点のオレはMFCどころかclassも理解していないC++素人だった。
だが、この時は先輩の社員(A)が派遣先から戻ってきていて
「私(典型的な中小企業経営者)とA君とキミの3人で開発するから。解からない事はA君に聞けば良いよ。」
と
典型的な(ry も言っていたので少し安心していた。
でもさすがは
典型的な中小企業経営者。
オレに安息の日々など与えてはくれなかった。
この後トンでもない事態を引き起こしオレを地獄に突き落とすのです。(この話は次回)
まあ、そうこうしている内に5月期も終わりました。
お待ちかねの給与日です。
今回はさすがに銀行振込で給与明細だけを渡されました。
でもやっぱりというか何というか
典型的な(ry は何かほざいています。
「住宅手当※2についてなんだけどね…。ウチは基本的に住宅手当という形ではお金は出ないのよ。
だから君が新大阪からここまで通勤しているという事にして、その通勤手当という形で出しているから。」
????????
訳解かりません。オレは徒歩10分の場所に部屋を借りて住んでいます。
なのに何故通勤手当?新大阪って何??
オレの頭の上には疑問符が出まくっていましたが
「手当てが出るのならそれで良い。」
と無理やりに解決させました。
おそらく、住宅手当としてより通勤手当として出す方が
典型的な(ry にとって利があるのでしょう。(国から金を取れるとか?)
2003/10/13追記 やはり通勤手当だと必要経費と認められ節税になるそうです。セコいオヤジだ…そんなだから人がついて来ないんだよ。
で、
典型的な(ry が去った後給与明細を確認してみました。
「お〜、手当ても出てる。やっとまともな給料(残業手当は無しだが)貰えたなあ、ぁ?、ァ?、アレ?」
:
そう、これで終わらせないのが
典型的な中小企業経営者です。
基本給が求人票に書かれていた額より
15000円低いのです。
もちろん抗議するオレ。
「見間違ったんじゃないの?」で済ませようとする
典型的な(ry。
後日、わざわざ学校から当時の求人票を取り寄せてヤツの目前に叩きつけるオレ。
「この求人票は昔のだ。」で乗り切れると考えている
典型的な(ry。
そして乗り切られてしまう情けないオレ…。
そう言えば入社初日に呼ばれて給料の話をしたなあ。
| 典型的な(ry | 「給料なんだけど求人票の額でOKかな。」 |
| オレ | 「あ、ハイ。それで良いです。」 |
…
典型的な(ry は具体的な数値を言わなかった…。
もしかして今回の事も計画的な事なのか?もう全てを疑わずにはいられない。
| ※1 |
この会社には社長派、反社長派という派閥が存在します。
社長派に属しているのは基本的に典型的な(ry 1人だけなので、何も知らない新人が入社してくると仲良くなろうと何時も必死です。
ただ、典型的な(ry はあまりにも強烈な人格エラーを備えているため誰とも仲良くなる事ができません。(プ
頭が悪い事も原因の1つです。
17:30に外出に付き合わせると帰りは定時以降になるのは誰でも解かります。そして相手がそれを喜ぶか否かも普通解かるでしょ。
でも典型的な(ry には解からない。それは彼が低能だから。 |
| ※2 |
本来なら住宅手当など出るような良い会社ではありません。オレは採用面接の際の交渉で住宅手当を勝ち取りました。
(後に全く理解できない理由で住宅手当は無くなってしまうのですが…) |
| 『偽りの同盟(実質属国)時代 中期(5月期)』結果 |
| 報酬: |
オレが考えていた額 - 15000円
典型的な(ry にかかわって以来、金は増えないが自虐的なネタ話は凄い勢いで増えていく。
言っておくがこれまで紹介してきた『典型的な中小企業経営者』の話はほぼ全て実話です。
作り話では無いのです。凄いでしょ。
|
|
| 忠誠度: |
-256(前回から-128 MAX=100として) ※入社して2ヶ月(笑いなどとうに消えた) |
|
2003/08/03
典型的な中小企業経営者には捕まるな その4
で、とうとう入社してしまったのですが…
いきなり残業の嵐です。
しかもCADでの図面作成。俺ソフト開発で就職したんですけどね。
で、当然のように残業手当は付きません。
「ウチ、入社1年目は残業手当ては出ない事になってるから。」
と低能野郎はほざいてますが、訴えれば書類送検くらいは可能です。
| ※ |
ちなみにこの会社では入社して1年以内には確実に派遣に出されます。
で、その後の残業費は派遣先に出してもらいます。よって残業費で会社の懐が痛む事は殆どありません。
というか派遣先が出した残業費からも会社の取り分として金を抜き取っています。
つまり、社員が残業すればするほど典型的な中小企業経営者が儲かる仕組み。 |
残業手当の付かない残業をしたり、
「社会人になって最初の休日は出勤してPM11:00過ぎまで仕事(一応出勤手当有)」
と絶対に忘れないであろう経験をしている内に給与日がきました。
社会人としての初任給です。嬉しく無いハズがありません。
処が思いがけない事態が起こりました。
その日仕事をしていると突然
典型的な中小企業経営者に呼ばれたのです。
何事かと構えていると、
「これ、今月の給料渡しとくな。」
と封筒を渡されたのです。
てっきり銀行に振り込まれるものだと考えていたので驚きです。
それで終われば特に問題は無かったのですがアホは何かほざいています。
「ウチでは3/21〜4/20までを4月の給与として払っているんだけど、君が社員になったのは4/1からでしょ。
だから今月は日割り計算して4/1〜4/20の期間分になっているから。」
なっ・・・何ですと〜。
イ、イヤ、確かにお前の言っている事はお役所的観点から見れば合っているかもしれない。
だがオレは
手当てが付かない残業を
50時間近くしているんだぜ。
休日も出勤しているんだぜ。
人であるならこの辺りも考慮すべきだろ。
っていうかしろよ。うわーん(泣)
という訳で初っ端からお約束の如く
典型的な中小企業経営者に一方的にやられてしまった。
もう一つ言うと、4月の収支は
赤字です。
そう、
「社会人になって最初の月の収支は赤字」という事なのだ。
食費と家賃、光熱費等最低限の金しか出ていないのに…
この経験も絶対に忘れないだろうな。
| 『偽りの同盟(実質属国)時代 前期(4月期)』結果 |
| 報酬: |
日当(基本給 / 23日) x 14日 + 休日出勤手当て(約18500円) - 税金等(給与の約2割) =?
(基本給 - 税金等(基本給の約2割)) x 約50% 円
ん?何かおかしいぞ。
オレは 23日 ある出勤日の内 14日、つまり 14 / 23 = 60% 出勤している。
それに休日出勤手当ても貰っているハズだ。
なのに何故50%なんだ。
(基本給 - 税金等) * 60% + (休日出勤手当 - 税金等)となり、少なくとも60%以上にならなきゃおかしいだろ?
あのアホは計算さえもできないのか?それともワザとなのか?
…チョット待て。
例えば…1ヶ月の出勤日を 31日 として計算したらどうなるだろう。
あくまで例えばの話だ。普通では出勤日を31日として計算する事などありえないからな。
日当(基本給 / 31日) x 14日 + 休日出勤手当て - 税金等 = (基本給 - 税金等) x 約50% 円
| オペレータ | 「艦長…方程式が成立しました…」 |
| タ○ロ艦長 | 「なんてこった…。神も仏もいないのか……」 |
| 副長 | 「天が我らを見放しただけでしょう…」 |
典型的な中小企業経営者…ヤツに常識は通じない…。
住宅手当もどっかに消えてるようだが…給与明細が無かったので全て闇の中。
|
|
| 忠誠度: |
-128(前回から-143 MAX=100として) ※入社して1ヶ月です(笑…えない) |
|
2003/06/21
今更だけど
第2次スーパーロボット大戦αをモノ凄くヤリたい。
FC版の第1次スパロボからヤってきた事もあるが、
あのCM、
JAM Projectが歌う曲
SKILLがモノ凄くイイ。
もう直だけど
半熟英雄 対 3Dをタマラなくヤリたい。
FC版の半熟英雄からヤってきた事もあるが、
あのCM、
ささきいさお氏が歌う曲
戦え!半熟英雄がタマラなくイイ。
発売まで後少しあるが
首都高バトル01を限界を超えるまでヤリたい。
ゲームの出来が良いであろう事はモチロン、CMの出来もかなり良い。
そのCMを
頭文字Dのアニメの間に流されては耐える事は不可能だ。
でも肝心のPS2が無いんだよなぁ。
SONYタイマーの発動確率が高まっているPS2を買う気は起きないし…
どうしたら良いだろう。Windowsで出してくれないかな。
とにかく、最近のゲームのCMは出来が良いという事だ。
CMに刺激されてゲームが欲しくなるなんて昔のCMではなかった。
ん?
テメエのセンス悪いよなんて事は言うなよ。
2003/06/09
蓮は勘弁して欲しい。
オレには蓮に対しての耐性は無いようだ。
コレを見るだけで丸1日は不快になる。
MLに「教えて君」が出現するのも勘弁して欲しい。
オレは「教えて君」自体は否定しない。
答えを知っている人に聞く事で、より深く理解でき、
また大幅な時間短縮ができる事を知っている。
だから「教えて君」が悪だとは思っていない。
だが、MLに出現する「教えて君」は悪だ。
「教えて君」自体にはそれほど害は無いかもしれない。
# 某女史のような「先天的荒し」と「教えて君」は別モノだが。
でも「教えて君」は様々なヤツらを呼び寄せる。
そう、害を齎すのは「教えて君」に惹かれて現れる香具師達だ。
香具師達はここぞとばかりに「教えて君」を非難・下卑し始める。
その下卑を「教えて君」に直接送りつけるのなら文句は無い。
だが何故それをMLで廻すのだ。
その糞以下の内容のメールを何故オレに送ってくるのだ。
そんなメールが大量に流れてきたりすると丸3日は不快になる。
情報交換系のBBSで偉そうに他人を見下す香具師も勘弁だ。
「ヘルプに載っている内容を理解できていれば解かるハズですが。」
(´,_ゝ`) アンタが理解できてるなら教えてやれよ。
「あなたの今後のために敢えて答えません。」
(;´Д`) ぇ…、ここ情報を交換するための場所だよね?。
「...。後、あなたは○○を直した方が良いですよ。」
('A`) へ??ここはナニ?アンタはダレ?
「そんなのでは社会人としては恥ずかしいですよ。」
(゜Д゜) ハァ?
何様なんですか?アナタ達は。
趣味で教育屋でもヤッテいる香具師ですか?
だったら板違いです。
そういう趣味の香具師が集まるトコに逝ってください。
アンタ達の吐く言葉は、アンタ達とは異なる一般人にとって多かれ少なかれ不快を与える言葉です。
視界に入ってくるのもウザイんッスよ。
そんなウザイ言葉を吐き散らす香具師に大量に書込みをされたりすると
丸5日は不快になる。 (;´Д`)y-~~
2003/05/19
MNGという規格を知っているでしょうか。
簡単に説明すると、「GIFでできるアニメーションを、GIFの変わりにPNGやJPEG形式のイメージを使って行おう」というものです。(←嘘言ってます)
このMNGという規格は素晴らしいです。
信じられない程細かな設定ができます。
やりようによっては、かなり小さいファイルサイズでありながら何十、何百フレームにも渡るアニメーションをさせる事も可能です。
GIFでできるアニメーションなんか相手になりません。
本当に素晴らしい規格です。
それでいて恐ろしく馬鹿げた規格です。
MNGの仕様を策定した者達は何を目指したのでしょうか?
AVIやMPEGといった動画フォーマットに取って代わる事でしょうか?
いや、これは無いでしょう。
基本的に音声データを持てないMNGは動画フォーマットとしては欠陥品です。
取って代わる以前の問題です。
じゃ何を目指したのか。
色々問題のあるGIFに取って代わる事ですか?
確かにMNGの規格自体はGIFより遥かに素晴らしいモノです。
GIFとは比べ物にならない程細かな情報を設定できますし、遥かに多くの色情報を持つ事ができますから。
でもどのように情報を設定させる気ですか?
その細かな情報をユーザーにどう設定させる気ですか?
直接バイナリを操作させてMNGファイルを作成させますか?
ツールを使って作成させる?
ではそのツールは誰が開発するのですか?
MNGの規格を策定した貴方達ですか?
MNGの規格全てを利用できるようなツールを開発してくれますか?
ちなみに自分ならそんなツールを開発する気にはなれません。
規格があまりにも複雑すぎます。
その規格全てを設定可能なMNG作成ツールを作れなんて言われた日には本気で逃げ出します。
つまり何を伝えたいかというと、「規格が素晴らしいだけでは世間一般に広まることは無い」という事。
GIFが何故普及したのか?
その理由の一つとして「GIFの規格が簡潔だった」という事があると思う。
GIFに対応するための敷居が低かったため、数多くのフリーソフト等で対応が行われた。
そして世間に普及していった。
MNGはどうか?
MNGには
「こんな項目どうやってユーザーに設定させる気だ?」
「これだけの数の項目をユーザーに設定させる気か?」
と思うような仕様が数多くある。
はっきり言って無駄な仕様が多すぎる。(良い言い方をすればそれだけ幅のある規格とも言えるが・・・)
ソフト開発者から嫌われる規格だと思う。
この規格で今後どれだけのソフトが対応を行ってくれるだろうか?
1995年頃、UNISYS社の行動によってGIFが問題ある規格となってしまい、そのGIFに取って代わるための存在としてPNG・MNGが誕生した。
で結局取って代われたのですか?
PNG(静止画)については取って代われたといって良いかもしれません。
(認知度ではまだGIFの方が上でしょうが…PG開発が職業でもPNGを知らない人がいたりするので)
でもMNG(アニメーション)については全然です。ダメダメです。お話になっていません。
もう2003年ですよ。
アメリカではこの6月に(UNISYSが何かしなければ)GIFの特許が切れるんですよ。
日本でも来年にはGIFは権利自由な状態になるんですよ。
GIFに取って代わるどころか、「GIFの復活 & 新規格の出現」によって何もしないまま消えてしまうような気がしてならない。
現に(この時点では)MozillaというウェブブラウザではMNGの対応を止める、という話題も上がっている。
何よりこの時点になってISOでの標準化も行えていない規格、というのは痛すぎるだろう。
MozillaのMNGの対応機能削除という話を聴き、何故かMNG規格に対して怒りのような感情が湧き出したのでこんな内容を載せました。
MNGは進む道を間違えた。オレはそう思っています。
極論を言えば、単純にGIFフォーマットでイメージデータ部をPNGに置きかえるだけでも良かった。
それによってもっと早く実用的な規格になっていたなら。
GIFの問題が出た時、多くのユーザーがMNGに求めたのは「GIFの代わりに使用できる規格」だったと思う。
「GIFでできるアニメーションを、GIFの変わりにPNGやJPEG形式のイメージを使って行おう」
単純に上記の言葉を一直線に追いかけるだけでも良かったんじゃないのか。
GIFに取って代わる事を第一の目的として生まれたPNG・MNGには多くの時間はなかったハズだ。
# 多数の人にとっては興味がないであろう話でスミマセン。
# また上記で述べている内容は個人的感想でかなり特異な意見である事は自覚してます。
# MNGの下位仕様であるMNG-LCやMNG-VLCについての考えは除いてます。
2003/04/13
典型的な中小企業経営者には捕まるな その3
『第二次典型的な中小企業経営者撲滅戦争』開戦直後、
我が軍は奇襲を仕掛けました。
正攻法が通用しない事は前回の戦いで学習しました。
同じ轍を踏むわけにはいきません。
「通勤に往復4時間もかけるのも勿体無いんで、家に持ち返って作業したいんですけど。」
この作戦は見事成功し、我が軍はある程度自由に行動できるようになりました。
(そして後にこの作戦の成功が奇跡を呼び寄せます。)
こうして奇襲作戦は成功したのですが敵の攻撃が激しく、防戦(作業をこなす)のために
1日
8〜10時間の時間が費やされました。
それでも
『通勤に往復4時間』が無くなったため被害は最小限に押さえられていました。
- うんちく -
この時のバイトはプログラムじゃありません。
CADでの図面作成でした。
単純作業で時間がかかるという中々の強敵です。
:
そうこうしている内に戦局は次々と移り変わり最終決戦を迎えました。
3月末日…
報酬が決定する日です。
今回は引くつもりは全くありません。
最悪入社前に玉砕という事態も覚悟していました。
しかしここで問題?が発生します。
私は持ち返って作業をしていたので会社には3日しか出ていません。
よって正確な出勤表など当然ありません。
時給で報酬を割り出す事などできないのです。
ここで一つの案が示されました。
『図面1枚作成するのに平均15分かかるから4枚で1時間として計算する』
というものでした。
私は噛み付きました。
「平均15分は短い。20分はかかる」と。
そんなやり取りをしている時、会社の社員の人
※1が衝撃的な言葉を発しました。
「他の外注※2の人と一緒で1枚500円でいいんじゃないですか。」
私にとっては
神降臨、ヤツにとっては
ユダ出現といった状況でしょう。
まあ冷静に考えれば、
「そんな基準があったんならオレだけ
時給で済まそうとするなサルッ」
の一言ですが…
というわけで
『第二次典型的な中小企業経営者撲滅戦争』は終局を迎えました。
今回の戦いは我が軍の勝ちと言って良いでしょう。
しかし…
まだ悪夢は醒めていなかったのです。
(まだ引きます)
| ※1 |
入社後気付きましたがこの人も社長を嫌っていました。(ていうか社員全員がそうだったんですが) |
| ※2 |
ホントに人手が足りてなかったらしく(オレ以外の)会社外の人にも仕事を振っていました。
基本的に外注に頼むとかなり金が掛かり儲けが少なくなるので余程でないと頼みません。 |
| 『第二次典型的な中小企業経営者撲滅戦争』結果 |
| 報酬: |
320枚 x 500円 - 税金10% = 144000円
ちなみに時給で済まされてた場合の予想
320枚 / 3枚(1時間あたり) * 850円(時給。最低850は貰うとして) - 税金10% = 81600円 |
|
| 忠誠度: |
15(前回から-25 MAX=100として) ※まだ会社に入社する前です(笑) |
|
2003/04/11
典型的な中小企業経営者には捕まるな その2
前回の続きです。
ちなみに私が就職活動をしていた時期はジャンプが170円の時ではありません。
アレは言ってみたかっただけです。イミは無いんです。ゴメン。
とりあえずバイトは止めました。
当然です。時給300円で働くヤツなんかいません。
しかし
『第一次典型的な中小企業経営者撲滅戦争』は我が軍の惨敗で終わりました。
敗因は
『常識』を信じすぎた事でしょう。
『典型的な中小企業経営者』にはそんなものは存在しないのです。
「坊やだからさ」と言われても文句は言えないのです。
その後
「卒業に向けて忙しくなってきた」と言って停戦協定を結びました。
我が軍は凄まじい(精神的)傷を負っていたので仕方ありません。
:
そして
『第一次典型的な中小企業経営者撲滅戦争』から約6ヶ月後…
3月初旬という時期でした。一通のメールが届きます。
「バイトに来てくれ。」
平穏は破られました。敵からの宣戦布告です。
この時期に仕掛けてくるとはさすが
『典型的な中小企業経営者』です。
学生最後の春期休暇をぶっ潰しにきました。
ご存知の通り夏期休暇は前回の戦争でほぼ完滅です。
冬期休暇は卒業関連でほとんど潰れました。
そうです。
この休暇は潰すわけにはいかないのです。最後の砦なのです。
これが潰れるような事になれば
「学生最後の年の大型休暇はバイトやら何やらで全て潰れてしまったんだよオレ。ハハハ…」
というシンジランナイ思い出が残ることになるのです。
と言う訳で何とか戦争を回避したいのですが状況がそれを許してくれそうにありません。
そこで一計を案じました。回避できないまでも開戦を延期させる事なら可能ではないかと。
早速交渉です。
「いろいろ予定があって…。それに3月下旬になれば自宅から
そちら(会社の近くに賃貸した家)に移りますんでそれからにしてくれませんか。」
「3月下旬じゃ遅いし(仕事)手が足りてないから来てくれ。」
:
交渉決裂です。
その日我が軍最後の砦は脆くも崩れ去り
『第二次典型的な中小企業経営者撲滅戦争』
が勃発しました。
続く…
2003/04/09
典型的な中小企業経営者には捕まるな その1
この時期、就職活動で忙しい人が多いと思いますが…
参考になるかは置いといて私の事例を紹介しましょう。
まず、私は就職先のターゲットを小さい会社に絞りました。
最大の理由は『堅苦しい会社(==大きい会社)はイヤ』という今考えるとおバカなモノでした。
で、6月末頃希望通りの会社から内定をもらい喜んでいました。
しかし…これが悪夢の始まりでした。
7月の末頃、
「8月からウチ(内定をもらった会社)にバイトに来てくれないか」
というメールが届きました。
さすがに断れません。学生最後の夏期休暇を諦めました。
通勤片道に2時間弱かけ、
9:00〜18:00までプログラム組んで、
家に着いたら20:00過ぎ、
という生活を週5日のペースで送っていると9月に入っていました。
そしてこの後信じられない出来事が!!!
学生最後の夏を犠牲にしてバイトに行きました。
朝 6:00 に起きてまでバイトに励みました。
そうまでして得た報酬が
34500円!!!!!!!(だったと思う)
時給にすると
300円チョイ。(ちなみに当時業界の相場は、1200円/1時間 位です)
有り得ません。
絶対何かの法律に違反しているハズです。
ていうか普通の人間ならこんな額は出せません。
ですが事実なのです。
我々はこの事実を正面で受け止めた上で先に進まなくてはならない。
「立てよ!国民」
:
:
イヤッ。「立てよ!国民」じゃナイ。
しっかりしろオレ。
もう過去のことだ。もう乗り越えたハズだろ?
…イヤ、コレほどの不条理を簡単に乗り越えられるワケは無いか。
:
…とりあえず、次回
『「錯乱坊主vs竜王は生きていた」あの頃ジャンプは170円!!』
に続く。
Don't miss it!
ってこんな流れで続かせていいのか…
2003/03/20
4/23の永田のIWGP防衛戦の相手が安田に決まったそうだ。
新日本はどういったモノを観客に見せたいのだろうか。
安田がフロントチョークで永田を落とすシーンだろうか。
永田がナガタロックで安田からギブアップをもぎ取るシーンだろうか。
それとも...
レスラー、レフェリー、観客が一体となって3カウントを叫ぶシーンだろうか。
:
永田はIWGPを過去最多タイの9度防衛している?
イヤ、そんなにはしていない。
前回の中西学戦でやっと初防衛を果たしたんだ。
それ以外の試合はエキシビションマッチだった。
IWGP選手権者永田裕志がファンサービスとして見せていたプロレスごっこ、格闘技ごっこだったんだ。
4月23日
永田にIWGP選手権"2"度目の防衛を果たして欲しいと思う。
観客が数えた3カウントを聴いて勝利した永田裕志がベルトを巻いている姿を期待する。
武藤の手を離れて以降ボロボロになっていたIWGPのベルトがその日復活する事を心底願う。
2003/03/19
冬木弘道が亡くなった。
3/11のWEW後楽園大会。
ほんの一週間前の事だ。
冬木はリングに上がった。
冬木の顔色はあきらかに悪かった。異常だった。
おそらく病院を抜け出してよい体調ではなっかっただろう。
それでもリングに上がった。
その場で 5/5 橋本との対戦を取り付けた。
そして、今日眠った・・・。
久しぶりにプロレスの事で目頭が熱くなった。
冬木が亡くなった事以上に、冬木がとった行動に対して震えた。
冬木は限界ぎりぎりまでリングに上がり続けた。
そして最後まで『プロレスラー 冬木弘道』として理不尽な要求をし続けた。
「俺は最後はリングの上で死にたいんだよ。わかってくれ。」
理不尽大王 冬木弘道。
間違い無く本物のプロレスラーだった。
2003/02/23
「W−1」4・19大会中止へ
視聴率は第1弾が8・4%、第2弾が10・4%と健闘。
だが第2弾はスタンドの半分が空席になるなど観客動員の実数では“惨敗”。
赤字は必至で、試合内容にも批判的な声が多かった。
記事より
まあ仕方ないかなぁ、と。
「W-1」=「WWFのニセモノ」とオレも感じてしまっているから。
ホンモノが日本に上陸した後にニセモノを始めてもダメでしょ。当然。
観る方にしても試合を観るというより参戦しているBigNameを観ている、
という方が正しいだろうし・・・(フジも試合を見せる気は無さそうだが)
こんなものが長く支持される程甘くは無いよ。
とりあえずオレの意見。
メンツは十分揃っているのだから問題は無い。後はギミックを少し抑えろ。
そしてストーリーが有る事を隠せ。(せめてそういう姿勢を見せてくれ)
オレはアメプロBigNameによる日本式(=ストーリーが無いと主張する)プロレス。
そういうプロレスを「W-1」で観たい。
バッタモンのショーは結構だ。
2003/01/21
19時6分頃
少し遅れたがWrestle-1にチャンネルを合わせる…
19時19分頃
憤りを静めるためNHKのニュースにチャンネルを変える…
「試合を流せ。サルッ」
19時25分頃
Wrestle-1にチャンネルを合わせるとホーストの入場シーン…
「カシンvsサブゥー戦は放送しない気か!ゴルァ」 と思わず叫ぶ…
19時26分頃
いきなりコールマン&ランデルマンvsコンビクト組戦の放送が始まる…
続けざまに小島、馳、ニューテキサスブロンコス、橋本、ブッチャーらの試合が放送される…
19時32分頃
再びホーストの入場シーン・・・
「これだけのメンツで行った4試合を約5分で終わらすか…」
もう呆れるしかなかった…
そういえば馳先生の「当選おめでとう」は放送されたか? 記憶に無い…
19時43分頃
サップvsホースト戦が終了する…
「フジテレビ、さようなら」と呟く…
19時45分頃
突然ドラゴン校長が画面に現れる。
「そうだよなぁ、せっかく闘龍門が参加してくれたのに放送無しのわけが無いよな」
と一人で納得する・・・と同時にカシン登場への期待を膨らませる
19時48分頃
とうとうカシン登場!!
放送時間にするとは2分程度だったが、放送されたという事だけで少し満足してしまう
19時51分頃
カシン戦放送終了
フジテレビはサップでもう少し引こうとしているが、風呂に入るためテレビを消す
そして思う・・・
「Wrestle-1に対するフジの放送スタイルにはNOだな。固定ファンも見なくなるぞ」
2002/12/26
先日、
「Gakkunさんは韓国が嫌いなのでしょうか?」
という主旨のメールを頂きました。(内容からすると親韓の方のようです)
おそらく
2002 FIFA World Cupに対する私の感想を読まれ、メールされたのだと思います
はっきり言いますと私は韓国は嫌いではないです。
仕事の同僚にも韓国の人が居ますんで親近感は持っています。
ただ、ワールドカップ期間中の
| ・ | 全てをぶち壊す位に酷い韓国に対する有利判定 |
| ・ | 韓国サポーターの圧倒的なナショナリズム |
に不快感を感じただけです。
その不快感をその時の勢いでWebにあげたのが
コレってだけの話です。
深い思いがあったわけでもなく、何てことは無いただのネタです。
だからあまり真剣に受け取られても…ね
3位決定戦では友人達と一緒に韓国を応援してましたよ
「で〜んぱ みんぞく」 チャチャッチャ チャッチャ って・・・・・
2002/10/14
今期、カブレラのホームラン数は55本でした。
カブレラのホームラン55本という記録は素晴らしいモノだと思います。
ただ、王貞治のホームラン55本という汚れてしまった記録を塗り替える事はできませんでした。
ホントしつこい汚れです。
プロ野球界全体で掃除にとりかかるべきですな。
まず、掃除する気がまったく無いジジイ共を排除する事から始めてください。
そうしないと何も前進しない。
そのことは、今の政界をみれば一目瞭然でしょ。
2002/10/05
王監督がカブレラと「真っ向勝負宣言」
で結果は…
5打数3四死球
ハァッッッッ、バッカじゃないの!!
すごい「真っ向勝負」だな
王よ
「真っ向」で「勝負」から逃げてくれたよッ(怒)
7回裏、死球で塁に出たカブレラがホーム突入した時、
ダイエーのキャッチャーに三沢バリのエルボーをくらわしたんだけど(血ぃ出てました)…
王は抗議すらしませんでした。
あのエルボーなら普通ひともんちゃく起きるハズだが…
徹底的にカブレラから(あらゆる面で)逃げてましたねぇ…
そんな腰抜け
王貞治様は
汚れた記録を両手に抱えて どっかに逝っちゃってください。
2002/08/08
UFOのLEGENDが本日あったわけですが…
皆さんはどう感じられたのでしょうか。自分的には結構しょぼかったなぁ…と。
(自分はテレビ観戦ですので5試合目からの感想ですが)
盛り上がったのは 菊田早苗 vs A・ホドリゴ・ノゲイラ 戦のみでした。
他の試合ははっきり言って実力差がありすぎ。
小川の相手なんて100%かませ犬じゃないかよ!
ガファリの体を見た瞬間思わず阪神x広島戦(byサンテレビ)にチャンネルを変えてしまったよ。
(後でビデオで試合を見たが…ガファリはパンチ一発で戦意喪失し相手に背中を見せてしまう本物のかませ犬でした)
とにかく…
オレがチャンネルを変えてしまった程だから視聴率的にかなり厳しいんじゃないでしょうか。
あまり盛り上がらなかった試合…
鬱陶しいくらいしつこく出てくる芸能人…
生放送故にたるいシーンもそのまま流さざるをえない…
次のLEGENDではこの辺を改善して満足させて欲しいなぁ…うん。
で、次あるんだよね?猪木さん。
PS. 仮に次があるとしたら、その時はまた解説を船木にして欲しいなぁ。
今回の船木の解説だけはホント素晴らしかったから。
2002/06/25
サッカーのW杯も後少しで幕引きです。
開催国日本にとっては十分満足できる大会だったでしょう。
ベスト16。十分じゃないですか。勝利だけが全てじゃないッ。
共催国の快進撃?をみてホントそう感じてます。
「不正」な「成果」を残せても意味ないでしょ。
結局「非難」位しか生み出さない。
とりあえず、
世界中のサッカーファンのための祭典も残すは2試合。
最後は大いに盛り上がって欲しい。
今大会の闇の部分を記憶から吹き飛ばす程に。
…公平な試合を望むのは当然の事だ…
2002/04/21
本日K-1の大会がありましたが…
相も変わらず武蔵選手の試合は判定に縺れ込みました。
相手がRPIDE戦士のセーム・シュルトで、試合方式がK-1ルールにもかかわらず。
しかも、その判定で負けました。RPIDEが本職のセーム・シュルト相手に…
今回の結果から、というかこれまでの結果から考えると
やはり武蔵選手の戦法に問題があるのではないでしょうか?
良い一撃を相手に入れても単発で、すぐ防御に入ってしまう。
かといって一発で相手を仕留められる程の破壊力は備えていない。
だから試合が判定に縺れ込む。
実力差がある相手の場合はそうでもないが、
相手の実力が同等以上の場合は消極的な印象が残る。
よって判定でも負ける。
今回、オレがみたかったのは武蔵選手とセーム・シュルトが足を止めて豪快に打ち合っている画だ。
勝敗はどうでもいい。今回の試合はグランプリの予選でもなんでもないんだから。
RPIDE相手に負けは許されなかった?
それは来週のクロコップVSシウバ戦で話題になる事だ。
今回の試合結果はたいして影響しない
今回の試合は
K-1ベテランの武蔵vs
K-1新人のセーム・シュルトという位置付けなのだ。
だからこそKOで沈めてやるという気勢をみせて欲しかった…
相手は新人なのだから。
2002/04/06
プルルルルルルル
プルルルルルルル
ガチャッ
:
「・・・・・・野か。」
「はい。そうです
あなたの望み通りIWGP選手権で安田は負けました。」
「・・・それは良かった。
…だが次からは99%勝敗が予想できるような試合は組むな」
「…今回は…
安田からベルトを取り上げたと言う事で満足してください…」
:
:
「2/16に安田に負けてIWGPのベルトを巻けなかった男が
たった1ヶ月半後にIWGPに再挑戦…
そして…その男が新日本のエースと呼ばれるレスラー…
:
今回の試合でその男が勝つという結果は誰にでも予想できるだろう
…あまりにもやり方が稚拙すぎる」
「 ・・・・・ 」
「…以上だ」
ガチャン
プープープー…
2002/04/01
週間少年ジャンプ18号の「ボボボーボ・ボーボボ」のネタ
「
原人が
肉を食べたら
長州になる」
:
この元ネタわかるのは読者の何割くらいだ?
少なくとも
少年は知らないでしょ?
ちなみに私は笑いました。懐かしい・・・
2002/03/21
もうヤスダはイヤダ。
もうギブアップはイヤダ。
3カウントで決着しないIWGP選手権試合はもう結構ダ。
フジタサン、イノキサン
アナタタチもモウ出てこなくてイイ。
IWGPはプロレスのベルトデス。
プロレスは3カウントで決着するモノデス。
3カウントを奪おうとシないヤツはレスラーではナイデス。
蝶野さん。
IWGPヘビー級選手権試合を早く正常に戻してください。
3カウントで決着がつくIWGPヘビー級選手権試合をまた見せてください。
そうしないと新日本という組織そのものに3カウントが入ってしまいます。
ワン、ツゥー …
私の中では次で3カウント目です。
2002/03/03
この週末はZERO-ONE、K-1と大きなイベントがあった。
ZERO-ONEに関して言えばそれほど悪くなかったね。
カードが発表された時に感じた失望感から思うと良かったと言って良い。
でも悪くなかったという程度の感想しかない事も確かだ。
次に
K-1は最高だったね
(武蔵戦は除く)
試合内容については十分満足できるものだったし、
(武蔵戦は除く)
KO決着でテンポ良く試合が進んだ事も爽快だった。
(武蔵戦は除く)
今回のK-1については大満足
(武蔵戦は除く)
ただ武蔵については不満がある。(上の文面からもわかると思うけど)
なんでそう判定が多いかなぁ…というか判定バッかなんだ?
もっと手数をだしたら?
もっと踏み込んで攻撃すれば??
カウンターばっかり狙うなや!!!
勝敗予想で
判定にもつれ込むと予想されるようでいいのか?
その予想が当たるようでいいのか??
そんな闘いしかできなくていいのか???
あんた日本のエースなんだろ?
もっと攻撃に重点をおいてもいいんじゃないか?
後、ミルコは強かったね。ハントを圧倒していたもんなぁ。
これでノゲイラとの闘いが面白くなってきた。K-1、PRIDEの頂上決戦だ。
2002/02/24
本日の3冠ヘビー級選手権…
川田が勝ちました…勝っちゃいました…
武藤に3冠王者でいて欲しかったオレとしては残念だが…
…だって武藤がベルト巻いている方がこれから後がおもしろいだろ。
武藤、小島、カシンの旧新日軍vs川田率いる全日軍
全日に三冠を取り戻すための闘い。
というような流れができて。
「それは新日的発想だッ!!」と全日ファンには言われそうだ。
…でもまぁ今回の結果は仕方がないと思う部分もある。
川田が三冠を取り戻すという流れは去年の内から作ってきたものだから…
その流れを無視して
川田が三冠奪取に失敗!!
なんて事になったら、それこそ???だろう。
今回はタイミングが悪かったんだと思う。武藤にとっても全日にとっても。
その分今後どう展開するか楽しみだ。
三冠王者川田利明
というのもイヤじゃないしな。
2002/02/20
小橋がケガしたらしい。復帰したバッかなのになぁ。
考えてみると今年は悪い事が起こり過ぎ(まだ2ヶ月だけど)
もしかして2002年はプロレス界の厄年なのか?
ちょっと思い出してみよう・・・
新日が1.4で大失敗・・・(最悪x256)
武藤の全日移籍でvs三沢戦は当分凍結・・・(個人的意見)
RINGSの活動停止(どうでもいいかも)
FMWの倒産(これも別にいいや)
安田がIWGP王者
・・・・・
・・・・・・・・
こりゃ絶対厄年だ。
厄を払うためにも、天山に早くベルトを取ってもらわなきゃ。
2002/02/16
・・ん〜・・・・・
いいのかぁ〜・・
それで良いのかぁ〜・・・・
新日本プロレスよ〜
安田だぜ〜
あの
安田だぜ〜
新日最弱とオレが思っていた
安田忠夫だぜ〜
その
安田忠夫に
IWGPヘビーのベルトを巻かせていいのかぁ〜
カリスマ蝶野から6分ちょいでギブアップとってしまうようなシナリオでいいのかぁ〜
新日エースの永田が負けちまうようなことでいいのかぁ〜
2、3年前までの安田を知っているヤツならば皆呆気に取られたと思うぞ
「えっっっ、安だ…なの。コレ…いいの?」 と
2001/10/06
近鉄のローズ、55本で終わった・・・。でも凄かった。
それは良いとして
王貞治は・・・
1985年のランディ・バースの記録更新を敬遠攻めで潰したのは
王貞治率いる巨人軍
で、2001年タフィ・ローズの記録更新を潰したのも
王貞治率いるダイエーだ。
それもバースの時と同じ敬遠攻めで・・・
こんな男のどこが偉大なんだ!!バカヤロウ