*[Macrium]Reflect 7.2 exeの追加->また面倒になってる

v6.3からv7.0になった際にexeが追加された
それだけなら特に問題は無いのだが、リソース(メッセージ出力)の整理をちゃんとせず
重複して3重に持たせるというとんでもないやっつけ仕事
ReflectMonitor.exe
MacriumBackupMessage.exe
https://nakapon.hatenablog.com/entry/20170228/1488290859

かなり悩んだが、苦渋の選択としてReflectBin.exeのみを日本語化
コード部への個別修正も最小限(CNTL+SHIFT+Lと言語コードのみ)としたため
スケジュール指定による自動実行等が英語表示のままと満足のいかない物になった

今回のv7.2では更に更新チェックとレスキューメディアの作成が別exeとなった
ReflectUpdater.exe
RMBuilder.exe

とりあえず本体のみのパッチをベータ版として公開し、関連ファイルの日本語化を
どうするかを改めて検討しようかと思慮中

*[Macrium]Reflect 7.2 日本語化作業中

Macriumの日本語化はv6.3から行っている
v6.3->v7.0->v7.1とバージョンアップに付き合ってきたのだが、
今までは変更箇所が少なく比較的移行が楽だった・・・
だがv7.2は今までとは様子が違った

主要リソースの差異状況
f:id:nakapon:20181102190821p:plain

ver.resはバージョン番号があり毎回違うので問題が無い
acc.resとrtf.resはそのまま流用可能
240.res、strg.res、xml.res、menu.resは変更箇所が少なく
多少の修正で流用が可能だった

問題はdiag.res
f:id:nakapon:20181031122334p:plain

ほぼ全面書き換え
diag.resはダイアログ全般をまとめたリソース
日本語テキストはもちろんのこと、日本語テキストに合わせて
微調整したダイアログ内のコントロールのサイズと位置も
すべてやり直しに(泣)

ダイアロクの数は325
現在は日本語テキストの移植中
その後各ダイアログを表示しながらコントロールのサイズと位置を微調整
リソースの移植が終わってやっとバイナリエディタでのコード部修正に入る

土日で終わるかなぁー(汗)

<追記>
3825が出た
当分は不安定で更新が続くかも知れない
その分日本語化は面倒になっていく

*[雑記]どうやらgoogle翻訳がUI変更したらしい

トラブルなのか昨夜英語が消えたgoogle翻訳
今朝確認したら英語が選択できるようになっていた
ところが仕様変更なのか日本語、英語、韓国語と3カ国語が並んでいる
f:id:nakapon:20181101115918p:plain

まずハングルを使うことがない自分には不要でしかない
韓国語がデフォルト表示されるようになったことも不思議だが、
それ以上にユーザーが選択できない強制表示(他国に変更できない)なのはなぜだろう

試しにuBlock Originの「要素をブロック」でフィルタを作成

https://translate.google.co.jp/?hl=ja
translate.google.co.jp###sugg-item-ko

2カ国表示にすることができた
f:id:nakapon:20181101115925p:plain

だが、ちょっと変
プルダウンメニューで他言語(例えばドイツ語)を選択すると3カ国表示になり
cookieを消さないとそのまま戻せなくなるみたい
どうやらUIが3カ国モードになったらしい
f:id:nakapon:20181101115930p:plain

仕様変更だとしたら・・・ヤダなぁ

<追記> 2021/03/17 一部修正
気がついたらまた表示されるようになったのでMyフィルタの修正
<追記2> 2021/12/15 一部修正
更に修正

! 2021-12-14 https://translate.google.co.jp
translate.google.co.jp##div.RCaXn.qSb8Pe:nth-of-type(107)
translate.google.co.jp##div.qSb8Pe:nth-of-type(107)
translate.google.co.jp###i14 > .VfPpkd-YVzG2b
translate.google.co.jp###i14
translate.google.co.jp###i11 > .VfPpkd-YVzG2b
translate.google.co.jp###i11

*[雑記]Google翻訳から英語が消えた!

google翻訳を開いて英文を入力、翻訳結果がなんとハングルに!
言語設定が日本語->韓国語になっている
変だなと思いつつ言語を検出するを押しても変わらない
仕方なくプルダウンメニューから手動選択しようとしたが英語がない!
f:id:nakapon:20181031205240p:plain

twitter検索すると同様の障害報告が多数ある
まさか米国に対する大規模なサイバー攻撃なのか?

しかしよりによっておでん文字とは・・・
今まさに日本中で騒ぎになっているのに見たくないねぇ

*[Macrium]Reflect 7 Home Edition v7.2.3188

しばらく更新がないので安定しているなと思っていたら久々の更新
しかも7.2になった
f:id:nakapon:20181031122339p:plain

ざっと読んだ感じだと
・レスキューメディアでWi-Fiサポート(WindowsRE?)
・CBTとMIGがマイナーチェンジ
・試用期間終了時に1週間の猶予追加?
・バックアップタスクの中止と警告ステータス追加(ログ出力)
バグフィックス
辺りが目に付く

内部的にはかなりの変更が入っていて(黄色が変更箇所)かなり面倒
ちょっと手間取るかも知れない
f:id:nakapon:20181031122334p:plain

*[kindle]kindle unpackをGUI版からCUI版に切替

以前文字コードの関係でGUI版を使っていたkindle unpack
https://nakapon.hatenablog.com/entry/20180716/1531708868

cygwinをインストールしたことによりCUI版に切替
例によってPPxから起動できるようにスクリプト作成

//!*script
// kindleunpack Ver 1.0
// 使用プログラム cygwin kindleunpack.py
// ============================================================
// 変数宣言
var FList		= '';	// PPxレスポンスファイル名
var iExt	= '';	// 入力ファイル拡張子
var iFile	= '';	// 入力ファイル名フルパス
var LibDir	= '/cygdrive/C/Program Files (x86)/KindleUnpack-master/lib';	// kindleunpack Libディレクトリ
var command	= '';	// PPxコマンドワーク
var WSHObj	= '';	// wshシェル
var RetCD	= '';	// 戻り値
var StmObj1	= '';	// スクリプト出力ワーク(BOM付き)
var StmObj2	= '';	// スクリプト出力ワーク(BOMなし)

// 処理対象ファイル名を取得しcygwin用に加工
iFile = PPx.Extract("%FDN%\\%R");
iFile = iFile.replace(/:/g,'');			// :を取る
iFile = iFile.replace(/\\/g,'\/');		// \を/に置換
iFile = '/cygdrive/' + iFile;			// Prifix付与

// 作業用ファイル名を取得するためレスポンスファイル作成し即削除
FList = PPx.Extract('%a*FDN');
PPx.Execute('*delete "' + FList + '"');

// スクリプトファイル作成
StmObj1         = new ActiveXObject('ADODB.Stream');
StmObj2         = new ActiveXObject('ADODB.Stream');
StmObj1.type    = 2;
StmObj1.charset = 'utf-8';
StmObj1.LineSeparator = 10; // adLF
StmObj1.Open();
StmObj1.WriteText('#!/bin/bash',1);
StmObj1.WriteText('cd "' + LibDir + '"',1);
StmObj1.WriteText('python kindleunpack.py -i --epub_version=3 "' + iFile + '"',1);
StmObj1.WriteText('exit 0',1);
StmObj1.SaveToFile(FList,2);	// 1:新規作成(あるとエラー) 2:ある場合は上書き
StmObj1.Close();

// BOM除去
StmObj1.Type = 1;
StmObj2.Type = 1;
StmObj1.Open();
StmObj2.Open();
StmObj1.LoadFromFile(FList);
StmObj1.Position = 3;
StmObj2.Write(StmObj1.Read());
StmObj1.Close();
StmObj2.SaveToFile(FList,2);  // 1:新規作成(あるとエラー) 2:ある場合は上書き
StmObj2.Close();

// スクリプトファイル名をcygwin用に加工
FList = FList.replace(/:/g,'');		// :を取る
FList = FList.replace(/\\/g,'\/');	// \を/に置換
FList = '/cygdrive/' + FList;		// Prifix付与

// bashキックコマンド生成
command = 'bash --login -i -c '
		+ ' "' + FList + '"';
// PPx.Echo(command);

// bash呼出
WSHObj    = new ActiveXObject('WScript.Shell');
RetCD = WSHObj.Run(command,1,true);  // true:終了待機する
WSHObj    = '';

// 後処理
PPx.Quit();

*[PC]cygwinでPython

少し前からPythonスクリプトを勉強している
サンプルになるスクリプトはネットでいろいろと入手可能なのだが
困るのが文字コード

windowsコマンドプロンプトはchcp 1200(UTF-16)が使用できない
(なぜにwindowsはchcp 1200に対応しないのだろう?)
このためコンソール出力がないPythonw.exeを使用するのだが、
一見うまく動いているように見えて途中で異常終了してしまったりと
あまりよろしくない

いろいろと調べたのだがスキル不足は否めず・・・
諦めてcygwinをインストールすることに
cygwinはインストール時のオプションでPythonをインストールするか選べる

cygwinのインストール終了後、試しにPythonスクリプトを使用してみると
あれだけ苦労したスクリプトが嘘のように動く
やっぱ餅は餅屋だわ

せっかくwindows下でunix環境を動かすのだからPPxからバッチを起動して
cygwinのコマンドを動かせないかとググる
bashをキックすれば良いと言うことがすぐに引っかかった
さらにPPxからキックできるようにスクリプトを作成
bashUTF-8(BOMなし)しか受け付けないのでADODB.Streamで加工
bashのパスは環境変数pathに追加済み

//!*script
// cygwin(bash)キックルーチン Ver 1.0
// 使用プログラム cygwin(bash)
// ============================================================
// 変数宣言
var FList = ''; // PPxレスポンスファイル名
var iFile = ''; // 入力ファイル名フルパス
var iDir = ''; // 入力ディレクトリワーク
var command = ''; // PPxコマンドワーク
var WSHObj = ''; // wshシェル
var RetCD = ''; // 戻り値
var StmObj1 = ''; // スクリプト出力ワーク(BOM付き)
var StmObj2 = ''; // スクリプト出力ワーク(BOMなし)

// 処理対象ファイル名を取得しcygwin用に加工
iFile = PPx.Extract("%FDN%\\%R");
iFile = iFile.replace(/:/g,''); // :を取る
iFile = iFile.replace(/\\/g,'\/'); // \を/に置換
iFile = '/cygdrive/' + iFile; // Prifix付与
iDir = iFile.replace(/\/[^\/]*$/,''); // 一番最後の/以降で/を含まない文字列を削除

// 作業用ファイル名を取得するためレスポンスファイル作成し即削除
FList = PPx.Extract('%a*FDN');
PPx.Execute('*delete "' + FList + '"');

// スクリプトファイル作成
StmObj1 = new ActiveXObject('ADODB.Stream');
StmObj2 = new ActiveXObject('ADODB.Stream');
StmObj1.type = 2;
StmObj1.charset = 'utf-8';
StmObj1.LineSeparator = 10; // adLF
StmObj1.Open();
StmObj1.WriteText('#!/bin/bash',1);
StmObj1.WriteText('cd "' + iDir + '"',1);

※ここにファイル処理用のコマンドを入れる※

StmObj1.WriteText('exit 0',1);
StmObj1.SaveToFile(FList,2); // 1:新規作成(あるとエラー) 2:ある場合は上書き
StmObj1.Close();

// BOM除去
StmObj1.Type = 1;
StmObj2.Type = 1;
StmObj1.Open();
StmObj2.Open();
StmObj1.LoadFromFile(FList);
StmObj1.Position = 3;
StmObj2.Write(StmObj1.Read());
StmObj1.Close();
StmObj2.SaveToFile(FList,2); // 1:新規作成(あるとエラー) 2:ある場合は上書き
StmObj2.Close();

// スクリプトファイル名をcygwin用に加工
FList = FList.replace(/:/g,''); // :を取る
FList = FList.replace(/\\/g,'\/'); // \を/に置換
FList = '/cygdrive/' + FList; // Prifix付与

// bashキックコマンド生成
command = 'bash --login -i -c ' + ' "' + FList + '"';
// PPx.Echo(command);

// bash呼出
WSHObj = new ActiveXObject('WScript.Shell');
RetCD = WSHObj.Run(command,1,true); // true:終了待機する
WSHObj = '';

※終了コードチェックはここにいれる※

// 後処理
PPx.Quit();