What's New » この記事

WordPressのバックアップと復元についての覚書き

WordPressは便利なんで重宝していますが、PHPとMySQLを使ってデータ管理しているのでなんかの拍子にバランスが崩れると激しく壊れるおそれがあってデータのバックアップと復元の演習を行う必要性をずーっと感じていました(めったな事では壊れたりしないので、やらなかったんですが)。が、今回手元に何も入っていないXP機が一機あるのでこれにこのFC2のブログの複製サイトを構築して、データを移植する復元の演習作業を行ってみました。実際やってみて分かった事もあるので、備忘録として書いてますが参考になればと思います。

(さらに…)

ノートン先生とマルウェア

最近マルウェアに感染したマシンを診ました(※キャプチャーを原寸で見るには、画像を二回ぐらいクリックしてブラウザに直接jpgがロードされる状態にする)

以前にもみたタイプのマルウェアだったので、駆逐ツール(ココで配布してる)を使って除去を試みましたが、今回はスルーしてしまいました。またこれも使いましたが、今回はCookieしかひっかけてくれませんでした(メールについてきたウィルスを駆逐する時には役だったんですが…) しょうがないので、タスクマネージャからおかしな動きをしているプロセスを見つけて、バッチファイルが保存されているフォルダと、起動トリガーとなっているレジストリの登録箇所をつぶして手作業でマルウェアを取り除きました。このマルウェアの駆動のカラクリに関しては、トレンドマイクロの分析官さんのブログに詳しく載っているのでそちらを読んでいただければいいと思いますが(参考 「HTAを利用したワンクリックウエアの新たな手口」)、ボタンを押してあやしい「HTA」形式ファイルがダウンロードされた時、このマシンに入ってたノートン先生(期限切れではない)は何してたんだろうかと思いました。トレンドマイクロの該当記事は四年前に投稿されてるので四年経っても未対応なんでしょうかねぇ( ̄д ̄) マカフィーもちゃんと引っかけてくれるのかいまいち信用が無いのでウィルスバスターいれとけばいいんですかね(危ないサイトにはウィルスバスターがブロックしててそもそも行かせてもらえないし)

P.S Vistaのセキュリティに閉口しました。マルウェアがもぐりこんでいる階層に行けないこと。行けないこと。邪魔でしょうがないヽ(`Д´)ノプンプン

スズノネセブン(画像アーカイブ用)アーカイブカッター

HG3形式の画像をスズノネセブンでも使ってるみたいなので、アーカイブカッターを作ってみました。Windows7環境なら展開できるかもしれません。

Download:[suzu_cut.lzh]

※画像アーカイブ以外のアーカイブの展開には使用できません。

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]

WindowsSDK 備忘録 その十一

トークンに分割する字句解析のところまで進んでるので、構文解析もさらっと流します。マスコット宣言についてのみ流れを追っているので、ParseLine();での字句解析が済むと、教本はCmdMascot();にて、マスコット文の種類の判別に進んでいます。このルーチンでParseExpression();という構文を判別するサブルーチンを行き来します。

教本でも、構文解析のところは難しいと思います云々書いてありますが、ParseExpression();辺りのコードは、チェックのための補助の関数をあちこち呼んだりする一方で、この解析が済むといよいよマスコットクラスのオブジェクトを生成するので、その前準備も必要になり、関数の数がまたまた増えます(マスコット宣言文に関係するコードだけに絞ってるのにね)( ´ー`)フゥー

制作メモでは…

制作メモ[v09] ———————————————————————————–

構文解析を行い、CMascotのオブジェクトを生成するのに伴い、Cvalue、CImage の両クラスも一気に作った。

▼CmdMascotSub(true, mascot_name, image_name, 0, 0);の直前まで
CInterpreter::CmdMascot()から、CInterpreter::ParseExpression()の構文解析部分で動きを把握する為、ログをかなり埋め込んだ。
CInterpExpr.cppの CInterpreter::NewStrConst()で、CStrValue型の配列の int型の 添え字StrConstsPtr を CInterpreterのコンストラクタで
初期化し忘れていたので、プログラムが誤動作した。ここを設定し忘れるとcase TK_STRING:のvalue_stack.push(NewStrConst(token->GetStrValue()));
から戻ってこれなくなる[先に進めなくなる]<==デバッカでスタックに「ぽもも」が二番目(一番目はダミー)の要素として入ってくるか確認する必要がでてくる。 ★例外クラスを追加[宣言…CLexer.h で、EScriptErrorとしてクラス宣言[インライン関数なので、CLexer.cppにはない]  例外クラスのオブジェクトは、CInterpreter.cppの先頭で7個生成。 ------------------------------------------------------------------------------- と、なっています。また、CInterpreter::Continue();では、構造が複雑になってきたので原文に従い、try~catch文を機能させるように戻しています。 分かりにくいところだと思います。なので、ログをいっぱいv09では吐いてます(;´Д`) ソースコード[v09.lzh]

WindowsSDK 備忘録 その十

制作メモ.txtに書いてあるところまで、マスコット文の宣言に関係するコードのみに絞ってみましたが、それでも一気にファイルが増えてしまいました。

字句解析をしてトークンに切り分けるところがv08で追ってるところです。ここはまだあっちこっち飛ぶとはいってもなんとかなるレベルですが、それでもねぇ…もぅ備忘録じゃねぇなこれは( ・∀・)ノ

制作メモ[v08] ———————————————————————————–

字句解析のCLexerクラスを追加。Utilites.cppにも補助関数を追加。
CInterpreter::ParseLine()の字句解析を一行分処理し、トークンを調べて、switch文に正しく分岐していかというところまで。

——————————————————————————-

ソースコード[v08.lzh]

WindowsSDK 備忘録 その九

字句解析以降のことはさらっと流す感じにします。ここから先は処理がややこしくてめんどうくさいし、もう備忘の域を越えてるしねヽ(´Д`;)ノ

ログを追えばいい話ですが、メインとなる処理の流れは、main.cpp のInterpreter オブジェクトの生成がスタートとなりスクリプト文が入ってるファイルをロードした後、CInterpreter の各関数を、Run();–>>WM_TIMER 経由で Tick();–>>Continue();–>>ParseLine();[※Mascot宣言の処理の場合のルート(字句解析)]–>>構造解析–>>以下、マスコットの登録処理へと、続いていきます。

※教本では 25ms 間隔でWM_TIMER イベントが設定してあって、Tick();関数で処理を分けてます。ここで入力待ちなどの処理をしてます。しかしマスコット文には関係しないので無視です。

※マスコットの宣言などのスクリプト文の処理に関しては、入力待ちのスクリプト文などがはいってParsingフラグが立たなければ、どんどん行を処理することになります。

※Tick(),Continue(),ParseLine()の各関数で分岐します。分岐からの処理はVoid 型の処理になりますので(つまりやりっぱなし)、それぞれへ処理を投げると、タイマーイベント待ちになり、WM_TIMERイベントが起きると、二回目以降は、Tick();を基点とするループ作業になります。

※字句解析以降の処理では、オブジェクトが増えてくるのでmascot.cpp の頭にメモリリークチェックをするような文を挿入しました。いれとくと便利ですね。

制作メモ[v07] —————————————————————–
★v07以降は、スクリプトを読み込んで処理するのだが、テスト用なのでビルドしたらDebugフォルダに出来ているWin32Project1.exe をダブルクリックすることで、デフォルトのスクリプトindex.mctを取り込んで実行する。

パーザープログラムの定義の前に、ファイルパスなどを加工するUtility.hとcppを追加。
マスコット宣言とテキストをスクリプトから読み出せるように、パーザープログラムの定義を開始。
CInterpreter.cpp のコンストラクタ実装時、config設定は、取りあえず形を崩さないで残し、
メンバの設定はNULLにしておくことにした。

また、メモリーリークをチェックする仕掛けを施した。
(参考)http://marupeke296.com/TIPS_No7_SearchMemoryLeak.html
——————————————————————————-

ソースコード[v07.lzh]

WindowsSDK 備忘録 その八

ソースコード[v06e.lzh]では、CImageWindow::WndProc(); のWM_PAINT: にimgwnd->WmPaint(); と指定し、子クラスのWm_Paint(); を実行する様に変更しました。画面上にも子クラスのメンバで書いてますとでるようにしました。

また前回のstaticなテスト用変数をCImageWindowクラスのstaticなメンバ変数のMapコンテナと置き換えました。このMapコンテナに、ウィンドウズハンドル値をキーにして、カレントのマスコットクラスのオブジェクトを登録してします。マスコットが一つ(小窓がひとつ)だけならMapコンテナはいらないですが、スクリプトの読み取りと実行まで再現する場合は、外せないものなのでここで組み込んでみました。

imgwnd->WmPaint(); のimgwnd の内容が変動するところが要所になりますよね。

これで一区切りになります。ここまではコードの量も少なくて構造も把握しやすいんではと思います。

この先の分岐としては、取りあえずビットマップ画像を画面表示したいだけなのなら、教本の様にCMascotクラスに画像を管理するクラスを追加して拡張すれば実行可能でしょう。これは比較的労力が少なく実行できそうです。

もう一つの分岐としては、スクリプトファイルを読み込んで解析しコマンドを実行するルートになります。教本では画面表示の実装が終わると、字句解析・構文解析へと解説を進めています。このルートに進むと定型的な処理とはいえ構文解析のところがやっぱりかなりややこしいので大変だと思います。削りに削ってマスコット宣言の処理だけに絞って抽出したものでさえ、補助関数を行ったり来たりしながらメインの関数をじりじり進んでいくような感じになります。

ソースコード[v06e.lzh]

WindowsSDK 備忘録 その七

備忘録七では、派生クラス CMascot のプロトタイプを取り植えず定義してみました。

メインとなるのは、CImageWindow 基本クラスから派生する CMascot 派生クラスの定義になります。備忘録四のメモで取り上げた、プロシージャから指定された関数を基本クラスから派生クラスの同名の関数に委託する処理をvirtual指定することで成立させています。

[CMascot.h]

virtual void WmPaint(); // 仮想関数。実装は各子クラスの同名の関数に委託。

[cMascot.h]

void WmPaint();

基本クラスにvirtual指定がされていることで、マスコットには、マスコットクラスのWmPaint();が、バルーン(ふきだし)には、バルーンクラスのWmPaint();にそれぞれ処理が委託されるようになります。基本クラスのvirtual指定を取り払ってしまうと、(参考)http://wisdom.sakura.ne.jp/programming/cpp/cpp30.html のサイトの実験結果からの引用にあるように、

(以下引用)
この機能は、同名のメンバ名を持つクラス間で面白い現象が発生します
メンバ名が基本クラスと派生クラスで衝突している場合
クラスを明示しなかった場合は常に自分のクラスのメンバを優先しました

と、同様の結果になります。メインの多態性についてはこれぐらいで置いといて、
もうひとつここではサブとして、static なメンバ関数内に配置されているメンバ変数の取り扱いに関してとりあげておきます。

教本では、作成した複数の小窓を登録しておくMapコンテナが、staticなメンバ関数として定義されているウィンドウプロシージャの中で使われている都合上、staticで宣言されています。そのルールは知ってたんですが、実装の仕方を知らなかったんでここで散々エラーに悩まされました(確か外部リンクエラーがでたと思う)

static なメンバ変数の実装に関するルールに関しての説明はこちらを読んでいただければいいと思います。(参考)http://www.geocities.jp/ky_webid/cpp/language/019.html
ここに、静的メンバ変数を宣言した場合、その実体の定義をクラス定義の外側に記述しなくてはなりませんと、書いてあります。

試験的な変数をCMascot.h のCImageWindow に、
static int TestNumber; // テスト用
というメンバ変数を宣言してます。

で、
[CMascot.cpp]

// 静的メンバ変数の定義(★クラス外部で行う)
int CImageWindow::TestNumber = 100;

と、いう形で実体の定義を行っています。

あとは、プロシージャ内でこのstaticなメンバ変数を呼び出して、値をログに書きだすテストを行っています。

尚、子クラスのオブジェクトは作りましたが、まだ CImageWindow::WndProc の WM_PAINT に子クラスのWmPaint(); に飛べって書いて無いので、それは次のv06e.lzh でやります。

ソースコード[v06b.lzh]

RSSが出力できてなかった点を修正

WordPress3.4 を入れなおした後から、RSSの出力がおかしくなっていた点を修正しました。

[修正の手順]
今のテーマのfunction.php にadd_theme_support(‘automatic-feed-links’); が、入っていなかったので、RSSをheadタグに書きだすように修正。

(参考)http://www.prime-strategy.co.jp/wp/391/

修正したら、ブログのindex.html を開いて、rssのlinkタグが出力されているか確認。

<link rel="alternate" type="application/rss+xml" title="気流邂逅点 &raquo; フィード" href="http://haganenomori.net/wp/?feed=rss2" />

に、出力されているので一応RSSは、配信されているのでいいけど、右サイドバーのウィジットの表示がエラーを出しているので、Wordpress管理画面より、上のlinkタグに書きだされているアドレスをコピー&ペーストして修正ヽ(`Д´)ノ

3 / 512345