Naknet blog

Nothing to believe, nothing else to believe.

バッチファイルにありがちなこと

皆さんバッチファイルは日々活用されていることと思いますが、

  • 複数ファイルを「SendTo」やD&Dでかませる
  • 処理をしている人も多いと思います。

このとき、shiftコマンドとifで繰り返しをしていると思いますが、これを

if "%1" == "" goto Exit
みたいにしていると、半角スペースが入ったファイルをかませた時にプロンプトが一瞬開いて落ちるという現象が発生します。

これは、例えば"c:\hoge\hate shinaku aoi kono sora no shita de yakusoku wo..."のようなファイルを渡したとすると、このコマンドが以下:

if ""c:\hoge\hate shinaku (略"" goto Exit
のように展開されることが原因です。
結果として、'c:\hoge\hate'のようなコマンドは存在しません。と表示された後すぐにバッチファイルが終了してしまうのです。

解決法としては、

if "%~1" == "" goto Exit
とすればいいです。
comments (0) | trackbacks (0)

もうpart3か

paths in their belief

また書いてしまいました。
こんなことしてる暇あるのかな……(いや、ないはずなんだけど)。

たまにはまともに紹介しますか。
えーっと、退院した年の晩秋の出来事です。
part2を一部踏まえています。

  • 時期的に無理がある。
  • (特に裕一の)性格が変わりすぎ。(無駄に饒舌だ、とか。)
  • 日本語でおk
  • など、色々と目に付く点はあると思いますが、不憫と思いご容赦ください。ご指摘頂ければ幸いです。

High place, in the wind.

誤魔化さないと生きてはいけないけど、そういう風には生きたくはないって気持ちもあるんですよね。
生きるというのには二つの意味があって、一つには生物学的に生きているということと、もう一つは人間として生きているということです。

前者のような生き方なら誰だって出来るでしょう。しかし、人間に生まれたからには、後者のように生きていたいと思います。
しかしそれは叶わない。
全てを受け入れていては破綻してしまうからです。

そんな中でも唯一残された可能性が、今回書いたようなやり方ではないのかと思っています。

成程。ご指摘のように「現実」はそうはなってはいないでしょう。
それは、みんな「生きて」いるからです。
つぶれてしまった人間は見えない。つぶれなかった人間は卑怯者だ。
だけど、それ――「卑怯」であること――こそ、彼または彼女が「人間」であることの証。だからその人は悪くない。彼らも赦されるべき存在。

しかし、そこに未来はあるのでしょうか?
――まだ赦せてすらいないのに。

ひょうひょうとしている人間でもなく、「強さ」を身につけてきた人間でもなく、世界の片隅で一人、真っ白な世界を望んでいる人間同士でなら、きっと、「人間以上の何か」に近づけるのではないでしょうか。

comments (0) | trackbacks (0)

つよきすやばい

その1


まずはこれをご覧ください:
(上:全フレーム、下:Top,Bottomフィールドに分離)

Frame 1


tsuyokiss_f1.png
tsuyokiss_sp_f1.PNG

Frame 2


tsuyokiss_f2.PNG
tsuyokiss_sp_f2.PNG

Frame 3


tsuyokiss_f3.PNG
tsuyokiss_sp_f3.PNG

解説


Frame 1〜3は連続した3frameです。Frame 2でシーンチェンジ。
Frame 2のBottomフィールドに注目。Frame 3の両フィールドと比べてみよう。


         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『どうせまたいつものフィールドオーダー反転だと思っていたら
        i|:!ヾ、_ノ/ u {:}//ヘ        表示期間1/60[sec]のフィールドが混じっていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    テレシネ後編集だとかドット妨害だとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…


その2


次にこれをご覧ください:
(上:クリッピング前、下:クリッピング後(T=57,B=63,L=10,R=6))

Frame 1


tsuyokiss_ed_f1.PNG
tsuyokiss_ed_c_f1.PNG

Frame 2


tsuyokiss_ed_f2.PNG
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
tsuyokiss_ed_c_f2.PNG
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

解説


Frame 2でテロップが切れています。
Frame 1,2でクリッピングの設定は全く同じです。
->EDだけ16:9ではない。ように見せかけて、もしかしたら上にずれているだけかもしれない。
何でそうなったかは全く不明ですが。
これはアナログキャプですが、デジタルだとどうなっているんでしょう。
次回はデジタルチューナーの方で録画してみます。
comments (0) | trackbacks (0)

AAテスト

sbtextにAA機能を追加したのでテスト。
メモ:'>$$' から '$$<' までAAブロック。

$$

             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \
         //, '/     ヽハ  、 ヽ
         〃 {_{`ヽ    ノリ| l │ i|
         レ!小l⌒    ⌒ 从 |、i|   乙にょろ
          ヽ|l⊃ r‐‐v ⊂⊃ |ノ│
        /⌒ヽ__|ヘ  ヽ ノ   j /⌒i !
      \ /:::::| l>,、 __, イァ/  /│
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |

         , -‐ ´ ̄   ̄ ̄`ヽ、
.       /             丶
        / /     _
.       / / /.// " ̄ `ヾ、 ヽ     ',
     / / ,' 〃       ヽハ     l
     Vl  l _斗'´     `ヽ、l从│    l
       |  ! /リ        j N | 、   l   
      ヽ小l ●     ●  イ l| }   |
.         lハl⊃       ⊂⊃| |ノ    |
.         | 人   r_,、_y     | |    l |
          j|  >'う  __, r<l ││ ││
       / | レ'  /:::_j_  / / ,/、│   l |

$$<

comments (0) | trackbacks (0)

欲しいCD

個人的なメモです。

  • まじぽかのサントラ。by Elements Garden
  • ゼロの使い魔のサントラ by 光宗信吉
  • ハルヒのサントラ by ?
  • つよきすED by I've sound
  • 吉永さん家のOP「オハヨウ」。EDはいいや。

現時点ではこんなもんか。どれも結構おすすめです。

『サントラ3枚買うか、250GのHDを買うか、それが問題だ。』

comments (0) | trackbacks (0)

ネトラジ

お題:ネトラジをGetASFStreamで自動取得したい。

GetASFStreamにも一応予約機能はありますが、これはURLが固定でなくてはならないので、ネットラジオでは実質的に使い物になりません。
でも、毎週手動でやると忘れそう。何とか自動で出来ないものか。
……というわけで、そのためのバッチファイルを作りました。
@echo off

cd /d h:\asf_get
start C:\Tools\GetASFStream\StreamGet.exe http://www.onsen.ag/meta/th%date:~5,2%%date:~8,2%.asx
これは音泉の「Radio ToHeart2」を取得するスクリプトです。
現在の日時を取得してURLを作成し、これをGetASFStreamに渡しています。
コマンドラインでURLが渡されると自動的に取得が始まるので、後はこれを「タスク」に追加しておけばおk。

その際、実行日時を更新日にしておかないと、存在しないファイルを問い合わせることになってしまいます。
また、0時丁度に更新されるということはまずないので、時刻はその日の夕方くらい(自分は24時間つけっぱなので12時にしています)がいいと思います。

ただ、AnimateTVなど、URLに(恐らく自動取得防止用の)でたらめな文字列が付加されているような場合は使えません。
なので、これはほぼ音泉専用ということになりますね。
あとはBandai Visualにも使えるかな。

肝は

%date:~5,2%
%date:~8,2%
の部分です。前者は月(二桁)に、後者は日(同じく)に展開されます。

wget辺りと組み合わせてhtmlを解析するようなプログラムを作れば、他のにも対応できるのでしょうが……。

例えば「ゼロの使い魔 On the radio」なら、

#include <boost/regex.hpp>
#include <cstdio>
#include <tchar.h>
int main( void )
{
	typedef std::basic_string< _TCHAR > str_t;
	str_t html( _T( "om\"><a target=_top href=\"http://www.mediafactory.co.jp/anime/radio/data/zero_04_wmp.asx\"><img" ) );
	boost::basic_regex< _TCHAR > r( _T( "<a.*href=\"(.*zero_\\d\\d_wmp\\.asx)\".*>" ) );

	typedef boost::match_results< str_t::const_iterator > result_t;
	result_t m;

	if( boost::regex_search( html, m, r ) )
	{
		for( result_t::iterator it = m.begin(); it != m.end(); ++it )
		{
			std::_tprintf( _T( "%s\n" ), ( *it ).str().c_str() );
		}
	}

	return 0;
}
こんな感じでしょうか?

# htmlが↑のような値の場合、一応成功したみたいです。

comments (0) | trackbacks (0)

というわけで

Regex Utility

を作ってみました。
Regex.exe - Find & Echo first found string which is matched for specified regular expression.
  -- Usage --
    Regex.exe <expr> [<file>]
  -- Options --
    <expr> : String Regular Expression.
    <file> : [Optional] File name which search for.
  -- Note --
    If <file> is not specified, search for stdin.
<file>を指定しないと、標準入力から検索します。
手入力というよりは
type searchfor.txt | regex.exe hogehoge regex.exe hogehoge < searchfor.txt のような使い方を想定しています。

応用

さて、これを応用して、AnimateTVのToHeart2 Radioを落とすバッチファイルを作ってみました。
@echo off

wget -O__temp.html http://shop.frontierworks.jp/digital/web_radio/detail_058.html
regex "<a.*href=\"(http://.*/r\d{8,}_[[:alnum:]]{4}_nb.asx)\".*>" __temp.html > __asx_url.txt
set /p asx_url= < __asx_url.txt
del __temp.html
del __asx_url.txt

start /d "<working directory...>" StreamGet.exe %asx_url%
注意点としては、GetASFStreamは設定ファイルをカレントディレクトリから読むということです。
startなら/d <dir>としておかないと、HDのあちこちにStreamGet.iniをばらまく結果になってしまいます。

[追記]
Regex.exeはboost::regexを使っているので、<expr>はPerlの書式に準拠します。
詳しくはこの辺で。

comments (0) | trackbacks (0)

パイプ処理について

Regex.exeでパイプのテストをしていると、
「プロセスが、存在しないパイプに書き込もうとしました。」
というエラーが出ることがありました。

どこがおかしいのかと探していたのですが、どうやらこれは出力元のプログラムに対するエラーのようです。
つまり、出力中のプログラムがまだ出力中なのに入力側が終了してしまうと、outputに行き場がなくなってしまい、結果としてエラーになる、ということです。

この問題は、入力側が終了する前に、EOFが来るまで読み込んでしまえば解決します。
C++なら、

// consume remaining output
std::cin.ignore( std::numeric_limits< int >::max() );
なんてどうでしょうか?
comments (1) | trackbacks (0)

Elements Garden

のHPがリニューアルされててびびりました。(http://www.elements-garden.com/)
音屋の宣伝のために視聴コーナーを作るなんてのは今までなかった試みですね。

今色々聞いているところですが、……佐藤裕美が足を引っ張ってるように聞こえるのは仕様かな。
なんだかんだ言って、やっぱりあの人の歌はそんなに上手くないですし。

暫くOHPも更新されていない間に各方面の曲を手がけていたようで、これもまた驚きましたね。
ただまあ、こうなってくると無闇矢鱈にサントラ買い集めるって訳にもいかなくなってきました。
資金的余裕もありませんしね。

EGの今後

曲の点ではいいと思います。
今後の課題として、他のクリエイターとの差別化を計るには、曲以外の要素、つまり作詞とボーカルに力を注ぐ必要があります。

曲だけでいいならBGM家業に専念すればいいわけですが、視聴がボーカルだけってことを考えれば、そうではないらしい。
少なくとも佐藤裕美をねぇ……。あれがいいって人も勿論いるとは思うんですが、もう少し叫ばないというか落ち着いたというか、そういう歌い方の方がいいのではないかと。

歌詞は提供先のシナリオライターなり作詞家なりが作る場合も多々ありますから、必ずしもEGの面子が担当できるわけではありませんが、それでも一人か二人、詩のセンスのある人がいるとかなり大きいです。
ボーカル曲というのは曲だけでも声だけでも、仮にその両方が備わっていたとしてもそれだけではだめで、詩にどれだけ感情がこもってるかというのが非常に重要です。
別に奇抜さを狙えとか言うつもりはありませんが、凡庸な詩では、その曲は瞬発力はあるにしても永くは聞いてもらえないと思います。

# 下手に奇抜さを狙ってはだめです。

上松氏も作詞しているようですが、「Wing of Destiny」なんかの、特にサビの辺りを聞くと、……うーん、曲が先行しているなと。

詩にはやっぱり生来のセンスみたいなものが要求されますし、歩んできた人生がどんなものかという点も響いてきます。
それ故に、一朝一夕ではどうにもならないのがまた厄介なところです。

# 同じことはゲームにおけるシナリオライターにも言えるのかもしれません。

……そんなわけで、例えば(度々同じネタで恐縮ですが)「Imaginary affair」とか「Wind and Wander」の詩を書いたKOTOKOさんは一体どういう風に生きてきたのだろうと、感心すると共に疑問に思うわけです。
こういう「傑作」がある一方では、数多くの曲の中には凡庸なものも(当然)あるわけですが、それにしても、やはりこういう作品の存在は大きいと思います。

彼女の歌詞に共通するのは、「情景描写」の巧みさです。
北海道という風土が影響しているのでしょう。「Wing my way」なんてまさにそうですよね。
「大地」とか「空」って発想は都会に生きている人間には中々出てきませんから。

その点I'veは恵まれていたと思います。
EGの本拠地はどこか分かりませんが、彼らがもし、「詩」に歌曲の重要性を感じるのであれば、地方に出ることをお勧めしたいと思います。
作曲に限らず創作活動をする人は、東京を始めとする大都市は須く避けるべきだと思います。
言葉を扱う人は特に、なのかな。

続きを読む>>
comments (0) | trackbacks (0)

Regex Utility ver.0.10.5

更新しました。
EUCの入力が扱えるようになるはずです。

ただし、以下のような理由により、<expr>内に日本語(を含むマルチバイト文字列)を指定した場合の動作は保証しません。

技術情報

多分VCに限らずWindows上の処理系なら殆どそうだと思うんですが、std::locale::global( std::locale( "" ) ) や std::setlocale( "" ) などの操作をしないと、wchar_tの日本語文字列がprintf()やcoutに出力できません。

例:

#include <cwchar>

int main( void )
{
	std::wprintf( L"This is 日本語文字列." );
	return 0;
}
この場合の出力結果は
This is となります。

これを回避するには、

#include <cwchar>
#include <clocale>

int main( void )
{
	std::setlocale( LC_ALL, "japanese_japan" );	// 追加
	std::wprintf( L"This is 日本語文字列." );
	return 0;
}
とすればいいのですが、さて、この状態で(ファイルなどから読み取った)EUCのテキストを表示しようとするとどうなるでしょうか。
……どうなるも何も、さっきと同じになってしまいます。

結局、ファイルの文字コードを判別してそれぞれのコードページを設定する必要があります。
コードページは'.'(ピリオド)に続けてLCIDを指定すれば明示することが出来ます。
Shift_JISなら932(殆どの場合これがOS既定)、Unicode(UTF-8)なら65001、eucJP-msなら20932です。

# 参考:Code Page Identifiers

何が問題なのかというと、まず文字コードを「判定」する必要があるということ。
IE使ってる人ならEUCのページがたまに化けて表示された経験があると思いますが、あれは判定ミスによるものです。
原理的に完璧なものを作ることは不可能で、これがどうにも気に入りません。

また、余計な処理を増やす原因にもなります。
これは例えば、std::basic_string<>に文字コード自動変換機能みたいなのを実装すればある程度は自動化できますが、必然的に重くなります。

更に上の例ではprintf()、wprintf()を使いましたが、std::coutでは、例えglobalで設定しようともimbue()しようとも日本語は徹底的に無視されてしまいます。
バグだと思いますが、もしこれが仕様なら分かりにくいこと甚だしいです。

EUCやShift_JIS(要するにMBCS)とは永久に決別できればいいんでしょうが、やはりそういったものの呪縛からは未だに解かれそうにありません。
一応先述のコードページを指定することでMultiByteToWideChar()が可能なようですが、……。

charset_cast<>でも作りますかね?

制限の理由

で、何でRegex.exeでマルチバイト文字が扱えないかというと、上記のような理由により内部で文字コードの変換を行わないからです。
普通は引数として渡される文字列はShift_JISですが、対象ファイルがEUCの場合はマッチしなくなります。
チェックして変更するってのも面倒なんで。

……今思ったんですが、ifstreamやofstreamに文字コード変換機能をつけたやつがあれば便利そうですね。
誰か作ってないかな。

comments (0) | trackbacks (0)
1/3 >>