*[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();

*[PC]JKB-89Sの修理(メカニカルスイッチの交換)

長い間使用しているキーボードJKB-89S
キーのいくつかが不調(押しても反応が無い等)なので修理
もう何回目か忘れるほどやってきた作業

f:id:nakapon:20181020121859j:plain

 

JKB-89Sはメカニカルスイッチ採用の小型キーボード

キー配置がやや特殊なもののテンキーを除いてほぼすべての
キーが配置されている(ただし古いモデルなのでWinキーは無い)

Justy倒産前に予備を1台、倒産後に3台、都合5台を購入した
一時期PS/2 I/Fはレガシーと言うことで一掃されかかったが
最近のモデルでも残っている(復活した)のが意外

一応PS/2->USBアダプタは確保済み
https://nakapon.hatenablog.com/entry/20090424/1240585672

 

最初はキーがおかしくなる度に次のキーボードへと切り替えて
いたのだが、流石に20年近くも使用していると、5台ともに
何らかの不具合を起こすキーが出てくる

 

カニカルスイッチはキー毎の個別(独立)タイプ
ググるとキースイッチを取り外して分解、清掃~組み直し
している人もいるが、自分は不器用なので(汗)、一番古いキーボードを
ドナーにし、おかしくなったキーを移植することで凌いでいる
現在ドナーは2台目で手持ちは3台+1台(ドナー)となってしまった
 f:id:nakapon:20181020121916j:plain

 

各々のキースイッチは2カ所半田付けされているだけなので道具さえあれば
難しい作業では無い

f:id:nakapon:20181020121912j:plain

*[PC]サブPC(ASUS Transbook R104TAF-W10)分解してデータのサルベージ

先日バッテリが充電できなくなり起動しなくなったR104TAF-W10
とりあえず正攻法として修理依頼を考える
保証書と購入証明(納品書)を確認したら1年6ヶ月前で保証は切れていた
修理代金の目安が聞けないかとサポートに電話したが、自動応答の

録音テープによると有償修理は1万円~との事

時代遅れだし1万円(しかも最低だからバッテリパックの価格によっては

これ以上になる可能性がある)も出すなら買い換えへと気持ちが傾く

とりあえずHDDのデーをサルベージ、最悪eMMCは抜き取って本体を

リサイクル業者に引き取ってもらおうとググって分解方法を探す
ASUSのTransbookは廉価モデルの売れ筋なのか、筐体はほぼ共通らしく、

いろいろと情報が出てきた

内蔵HDDの取り外しはこの方のblogを参考にさせていだいた
https://nyanonon.hatenablog.com/entry/20150508/p3

 

ネジを外してツメを押して裏蓋を浮かせていくのだが自分は

期限切れのクレジットカードを使った

f:id:nakapon:20181014143949j:plain

 

HDDは比較的簡単だったが難しかったのが本体側

本体側はこちらのblogを参考にさせていただいた
https://ameblo.jp/miple/entry-12296610982.html

 

本体側はキーボード部よりも難易度が高い
周囲を一通り眺めて中央コネクタ左右にあるサポート部?
(コネクタではない金属部)の上部に精密ドライバを差し込んでこじり、

浮いてできた下側の隙間をクレジットカードでこじる
一カ所でも外れれば後は(心理的にも)楽になる

f:id:nakapon:20181014140247j:plain

外してみてびっくりしたのはバッテリが膨らんでいる(俗に言う妊娠状態)

f:id:nakapon:20181014140216j:plain

バッテリの型番はC12N1320 3.85V 31Wh

ググると国内でもいくつか販売サイトが見つかるが価格は6千円程度~とやや高価

まあこの手のパーツは保証や性能、到着までの待ち日数を妥協すれば

中華製が安価なのでAliExpressで検索
送料込み19.84-(約\2,700-)があったのでこのくらいならと注文
海外通販は怖いのでバニラVISAを使用して購入
(為替レートが高いのはだからだろうか?失敗したかも)

到着は2~3週間後くらいだろうか
ちゃんと到着して不良品で無ければ良いのだが・・・さてどうなるか

 

<追記>10/21

日本に入ったらしい

週明けには到着しそう

勘違いしたようで上の図を見るとまだ中国内hub(中継拠点)みたい

残念orz

f:id:nakapon:20181021193037p:plain

  

<追記>11/9

やっと到着

https://nakapon.hatenablog.com/entry/2018/11/10/123352

 

*[PC]サブPC(ASUS Transbook R104TAF-W10)の故障

デスクトップ、ノート、タブレットのPC3台を使用しているのだが、
先月タブレットPCのバッテリがへたった
充電がまともにできない

具体的な数字は忘れたが、バッテリ残量が極端に少なくなると
使用できなくなる(バッテリを充電しろ画面が出て起動しなくなる)ため
どうした物かと思っていたのだが、幸い残7%で止まり使用はできている
ので年末辺りにセール品が出たら買い換えるかと思っていたのだが・・・

先週ノートPCが同じようにバッテリ充電ができなくなった
しかもこちらは起動に足る残量が確保できない所まで落ちてしまったorz

気づくのに遅れたためデータのレスキューもできず・・・
HDDは取り外してデータを取り出せるが内蔵ストレージ(eMMC)の
データは起動しないと取り出せない
時代遅れのATOMモデルだしあまり修理代金がかかるようなら
諦めて買い換えるつもりだが、その場合には内蔵ストレージの
データは諦めるしかなさそう

*[PC]Windows 10 October 2018 Update 雑感

 1日ほど使っただけだが、特に変わりないなと言うのが第一印象

例によって設定や手を入れたレジストリが元に戻されるので

気がついたところからやり直しているのが面倒なくらい

 

なぜかネットでトラブル報告が多いAlcohol 52%(SPTD 2.12)も

インストールしたままで問題がなかったし、Classic Shell(注)も使えている

(注)Classic Shellは開発終了し、有志によって後継のOpen-Shellが

リリースされているが自分の使い方だと目立った不具合がないのでそのまま

 

Macrium Reflectによるリストア/バックアップも問題なさそう

唯一の不満点はClibor(クリップボード拡張)がwindows終了時に

クラッシュする確率が高くなったこと

April 2018 Updateの時にはこんなにクラッシュしなかったのだが・・・

windows終了時なので使用には問題ないが別アプリでシャットダウンを

行う際に注意が必要なのがやっかい

  

 <追記>

Cliborの設定を変更し、「終了時にクリップボード履歴を保存」を止めた

今のところクラッシュは出なくなった

*[PC]Microsoft、「Windows 10 October 2018 Update」の配信を停止

なんでも勝手にユーザーファイルが削除される事があるそうで原因不明

taisy0.com

幸い自分は問題なかったがバックアップ取らずに作業してる人は大変だろうな

  

<追記>10/11

原因が判明したそうで

pc.watch.impress.co.jp

フォルダのリダイレクト「Known Folder Redirection(KFR)」を使用し、

かつオリジナル(%USERPROFILE%下)が残っている場合に

オリジナルを削除するとのこと

 

自分はエクスプローラーのプロパティからで無く mklink で全部手動で

設定しているからなのか、オリジナルは残ってなかったのだが

Music(1)、Pictures(1)・・・等、コピーが作成されていた

  

<追記2>10/12

気がつかないうちにKB4464330(対策パッチ)が当たって17763.55になっていた

f:id:nakapon:20181012193538p:plain