実験室 » 備忘録 » この記事

フォームのPOSTデータを自動送信する仕掛け(備忘録)

日常の作業の中に「ある特定アドレスのhtmlにある記事一覧を定期的に取得して、サテライトサイトのhtmlリストを作るという作業があります。参照元のリストは、割とこまめに更新されているので、更新時に参照元から削除されてデッドリンクになっているサテライトサイトの移植済みの記事のリンクを削除して最新の状態にする」という作業があるんですが、リンク切れをチェックしてくれるサイトに毎回サテライトサイトのアドレスを入力して、フォームボタンを押すという動作が面倒くさい。その一手間が面倒くさいので、デスクトップに置いたアイコンクリック一発で、結果ページが表示されるようにしました。

通常ですと、http://deadlink.tv/ に行って、アドレスを入力後、submitボタンを押してリンク切れを確認しますが、

deadlink

下の方に小さく書いてある「DeadLink.tvをホームページに設置」というページに飛んで、htmlのフォームをコピペしてデスクトップ上にhtmlファイルを作って保存します。

出来たら、ファイルを開いてvalueのデフォルト値を指定アドレスに打ちかえ、後は同じような質問をしていた人[http://oshiete.goo.ne.jp/qa/815246.html]に対する答えの部分を反映して、保存すれば、デスクトップ上のアイコンのワンクリックでブラウザに結果が表示されるようになります。

以下の様なコードにします

<html>
<head>
<title>DeadLink.tv にすぐ飛ばして表示する</title>
</head>

<body onLoad="document.F.submit();">

<!-- DeadLink.tv からコピペ -->
<table border="0" cellpadding="0" cellspacing="0" style="font-size:8pt"><tr><td bgcolor="#ffffff"><form name="F" method="post" action="http://deadlink.tv/" target="_blank"><a href="http://deadlink.tv/" target="_top">リンク切れチェック</a><br /><input name="url" type="text" size="20" value="http://[ここに指定アドレスを書き込む]" /><input type="submit" name="exec" value="Check" /></form></td></tr></table> 

</body>
</html>

ちょっとだけ作業が楽になりました。

P.S そもそも発信元にRSSで更新情報を配信してもらい、それを自動取得して更新すればもっと楽なのですが(2chのまとめ板みたいにね)、やってくれないんだなーチキショー( ´ー`)y-~~

ファイル名を小文字にするバッチファイルについて(備忘録)

デジカメなんかが自動でつけるファイル名は、大文字で名前をつけてくれるのですが、DreamWeaverで画像を貼りこむ時に、いいかげん数が多いと癪に触るので、バッチ処理で前処理することにしました。こうゆうバッチファイルは大抵誰ががすでに作ってくれているものなので、検索して見つけました。そのままバッチファイルとして保存して使えば、なんら問題は無いんでしょうが、書いてあるスクリプトの内容をやっぱり理解した上で使いたいと思うのは人情です。

参考サイト
http://blog.noris.today/?p=372

googleなどで「ファイル名 小文字 変換」とかやるとでてきますね。

で、普段バッチファイルなんかは書かない人が、いきなりこうゆう文を読むとつまづいてしまいます。

FOR %%I IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) ^
DO CALL SET STR=%%STR:%%I=%%I%%

前文の
SET STR=%STR:A=a%

までは、素直に分かる。が、SET STR=%%STR:%%I=%%I%%
のところが、バッチファイルのルールを知らないので「???」となりましたので、備忘録を書いておこうかと思います。

★以下、分かってなかったポイント。
(1) ^ 記号。…正規表現?とか暫く思ってましたが、よくよく考えるとこれはプロンプト文ですので、改行がはいるけどコマンドとしては連続してるよとの意味だった。以下のサイトに説明あり。
(参考サイト)http://pf-j.sakura.ne.jp/program/dos/doscmd/str_circumflex.htm

(2) batファイル全体の構文ルールがそもそもよく分かってないので、ざっと把握したいという…バッチファイル書かないから(;´Д`)そこからだよね。やっぱし。
(参考サイト)http://qiita.com/sksmnagisa/items/8c4c1788af44cc1dc63a
こちらのサイトの覚書、ざっと読むだけでも大掴みで理解できるのでとても助かります( ^ω^ )

(2.5) for文中の、%%I とか。これは、気持ち悪い書き方だけどエスケープ文字がfor文中の変数にはくっつくという説明を読んで理解した。だが、やっぱりなんか嫌。

しかし、for文のところはまだしっくりこない。

(3)SET STR=%STR:A=a% とSET STR=%%STR:%%I=%%I%% がしっくりくるには…
これが、他の言語でいうところのエスケープシーケンスのルールを単純に当てはめると、
後者の中から、エスケープ文字にあたるところを除くと、
SET STR=%STR:%I=%I% となる。これで正しい。最前列と最後尾の%はここでは、無視して、中身を比較する。STR:A=a と STR:%I=%I ここが、ルールを知らないとつまづいてしまう。

前者の解釈では、大文字のAを見つけたら小文字のaに差し替えて、STRに格納するという意味だが、
%I=%Iだと、おんなじものを差し替えてるように見えてしまう。で、初めてみると「???」になった訳ですが、ここには、こうゆうルールがあるのを見つけてきた。

(参考サイト)http://qiita.com/q1701/items/d81e51a64f41ca841da6
このサイトの中程あたりの文章に、「大文字、小文字に変換する」というセクションがある。そこには、

(以下引用)———————————————————
%変数:置換元文字列=置換先文字列% を使う。
置換元文字列の大文字・小文字は区別されないので、以下の動作となる。

%ENV:A=A% ・・・ a または A → A
%ENV:a=a% ・・・ a または A → a

——————————————————————
このルールを知ってれば、ここでやっと納得できるようになる。

確認すると、STRという変数には、対象フォルダにある(処理中の1つの)ファイル名が入っており、
%I=%I も上のルールに従って書き換えると、inで指定されているパターンは全て小文字なので、例えば、a=a という下のケースの書き方に置き換えられる。これで「(%ENVの中身に)a または A(を見つけたら)」だったら、「a」にするという解釈が成立する。

「置換元文字列の大文字・小文字は区別されない」というルールを知らないと「???」となりがちなバッチ処理についてでした。

WindowsSDK 備忘録 その十二

前回までで構文解析をさらっと通過したので、画面にビットマップ画像を表示するところを追加しています。

教本のCmdMascotSub();以降の部分になります。画像管理クラスを作成し、マップコンテナを作って複数HBITMAPを管理しています。

画像管理に関わるところは…
————————————————————————————-
CImageWindow::CImageWindowのコンストラクタ内で、
// 画像ファイルの読み込み
Images=new CImages();
Image=Images->GetOrNew(image_name);
の部分から、
CImage* CImages::GetOrNew(string file_path)へと渡り、
// 既存のオブジェクトがなければ新規に作成する
CImage* image=new CImage(file_path);
Images.insert(TFileImageMap::value_type(file_path, image));

によって、ここのコンテナに、”pmm1_ask”と、”新規に作成されたHBITMAP情報を持つCImage(単体)オブジェクトへのポインタ”を格納する。このコンテナImagesも静的に配置された(1個しか出現しないのでstaticではない。CImage[単体]のコンテナBmpsはマスコットが複数宣言されれば、その分存在する可能性があるので、コンテナも共用できるようstatic)
—————————————————————————————-
1つの画像に関して上の関係を整理すると、
Imagesコンテナ > Imageクラスのオブジェクトへのポインタ > HBITMAP > bmpファイル
という、関係になっていると解釈されます(左二つと右二つはそれぞれ別のマップコンテナで管理されてますが)

スクリプトindex.mctには、二つのマスコットを宣言してますので、画面には二つの窓が開くようになります。

以上、最小構成のつもりでマスコット宣言の処理の流れを追って教本の内容を整理しただけなのですがそれでも結構な量になっちゃいました。やっぱり大まかにWindowsとクラスの関係を把握するというのが目的なのなら、字句解析以降は省略して、一個の画像を表示するぐらいでコンパクトにまとめた方がおさまりが良かったみたいです。

P.S メモリリークをチェックするように途中からしましたが、これによってちょこちょこ今まで小さなリークの警告がでていたんで教本にはない後処理を追加しています。ただそれでもメモリリークが最後に一個残りました(;´Д`)
一つ目に読み込んだビットマップ画像に関係してると思われるのですが、それがどこかのタイミングでメモリ域に残るみたいです。二つ目のビットマップ画像に関しては残らないのでどうもよくわかりません。マップコンテナに複数画像のHBITMAPを持っているので、終了時にコンテナの中身をチェックしてHBITMAPが存在するなら、DeleteObjectするようにテストしてみましたが、はずれでした。このリークの警告に関しては、解決方法が残念ながらわからないです。残念(`・ω・´)

ソースコード[v11.lzh]

[FC2] WordPressドメイン移行したら

Yahooジオプラスからドメインを持ってくる手続きが分からな過ぎだった件で、契約解除後ドメインが解放されるのを待って、今回FC2から再取得しました。が、色々な問題が発生しました。ちょっと気楽に考えすぎていたようで(;´Д`)

解決に至るまで
1.FC2ドメインで独自ドメイン契約を結んでから、cocoaアカウントのブログにアクセスできなくなった。urlの変更が反映されるまで数日かかるからと思い、2,3日放置していたがcocoaアカウント、haganenomoriアカウントともにいっこうにつながらないので、初めてFC2の管理パネルのヘルプをみる。結果、FC2の管理パネルの方のドメイン設定の欄を独自ドメインにしてかつ有効にするのを忘れていたorz (自動設定じゃないんだね)

2.urlがhaganenomoriアカウントのみになったけど、まだWordPressのブログにアクセスできない。ここでまたWordPressのトップにindex.htmlからリダイレクトさせているのを思い出す。cocoaアカウントになってるのをhaganenomoriアカウントへのリダイレクトに修正。これでアクセスできるかなと思ってブラウザでみるけど、ieではまたもやはねられてFC2のトップへ飛ばされてしまう。FireFoxでも確認。きつねさんだと、スタイルシートが反映されていないけど、ここでやっとhaganenomriアカウントでのアクセスが確認できた。ieのはキャッシュかセッションのゴミによる不調だと思うのでとりあえず放置。きつねさんの方からブログのソースコードを開いてみる。cssの取り込み先が全部cocoaアカウントのままであることに気付く(そりゃスタイルシートが適用されないのも当然だよね)。

3.ここまで進んで、やっとWordPressが、自分のパスの管理をURLで管理してることによる影響を認識した。WordPressのconfigファイルにあたるものを探してみるが、cssの基点パスを設定してる変数$stylesheet の定義箇所が分からない(どこー?) と、色々困ってブログの管理画面に入ろうとするが入れない。(※ haganenomoriアカウントは有効になってるので、haganenomori.net/wordpress/log-in.php にはアクセスできるけど、ここから先がcocoaアカウントでアクセスする設定のままなので進めない) 色々あたふたして、カッコの様な状態になっていることが推測されたので、ここでやっとWordPressの基本設定を管理してるMySQLのDBいじりにいかないといけないことに気付く(´;ω;`)ブワッ

4.phpMyAdminから、以下のホームページで紹介されているように、cocoaアカウントで設定されているものを全て、haganenomoriアカウントに変更。参考[ http://picomint.net/2010/06/08/wp-2/ ] DBのバックアップも今更ながらとってみたけど、今更ですよね。

5.DBの再起動なんて、レンタルサーバーでは考えられないので、まんまブラウザ閉じて再アクセスで更新できるかなとすごく心配しながら再アクセスしました。ドキドキ(;><)結果はうまく更新してくれました。haganenomoriからブログ管理画面に入れました。しかし、WordPressのブログはかなりぼろぼろになってます。まず、ヘッダーのトップ画像が落ちてる。あと、投稿記事の画像がみんな落ちてる。最後にプラグインがいくつか切れてる。トップ画像は、管理画面から更新できましたが、残りは、全てcocoaアカのurlへのリンクをダイレクトに指定していたので、全て手修正しなければなりませんでした。これは仕方が無い。毎日の記事につける画像はurlで指定して拾う方がラクチンだったので、こうなりました。ちなみにこうなることを恐れて、ワンクッションつけてオブジェクトとして管理していたギャラリーの画像は全部無事でした。めんどくさがってワンクッションいれなかったものが全滅という(記事が少なくてよかった)。これらを全て修正してやっと回復しました。

今回の収穫

ドメイン変更は慎重にヾ(・д・` )

備忘録(短命ポート)

図書館で借りた「ポート番号のしくみ」という本を読んでいます。10年くらい前に刊行された本なのでだいぶ古いですが、簡潔にまとめられていて復習に良いです。

で、備忘録として忘れないうちにφ(`д´)メモメモ…
[引用]
1~1023までは、サーバ・アプリケーション用に予約されています。この範囲のポート番号を特別に「ウェルノウン・ポート番号」と呼びます。
そして、1024~65535のポート番号は「クライアント・アプリケーション」に動的に割り当てられています。

はい。少し記憶があいまいになってました。ウェルノウンポートなどの名称ばかりに注意がいって太字の部分の何のために二つのグループに分けていたのか忘れてました。

続けて引用。

サーバ側のポート番号が「ウェルノウン・ポート番号」であり、クライアント側のポートが「エフェメラル・ポート番号」です。エフェメラル(はかない・短命)番号は通信が行われる際にアプリケーション間で適宜割り当てが行われる番号のことです。

例.)http の場合
クライアント
ポートXXXX(1024以上)

サーバ
ポート80

複数台接続してるとき、ルーターが短命ポート使って送信元の端末を判断するのに短命ポートって使ってるんだぁと適当な覚え方をしてたので、そこ修正しないと(;´Д`)

ルーター無しの一対一の時も上記例のように、ウェルノウンポート(サーバー)と短命ポート(クライアント)の関係が成立してるのね。

うん。改めて覚えなおした。