Foltia with AppleScript

Foltia animelockerのトラブルシューティング

アップルのブックで読む:電子書籍

アップル純正のブック(book.app)が私のお気に入りです

子供の頃は読書嫌いだったんですが、アラフォーぐらいからよく本を読むようになりました。別にインテリぶってるわけじゃないのですが、きっと年齢のせいなんでしょうね。 昔はいろいろなジャンル例えばそれこそ夏目漱石とか川端康成とか井上ひさしとか筒井康隆とかも読みましたけど、川原礫とか支倉凍砂とか榊一郎なんかのライトノベルも結構好きで、今はどちらかというと今風のラノベを読むことの方が多いかもしれませんね。

数年前までは文庫本を新刊で買ったり、古本やで買ってきて裁断機でカットしてスキャナーで読み込む「自炊」*1ってやつでZIPやPDFビューアーで読んでましたが、裁断で肩痛めたりするし手順が面倒くさいのと、裁断後の本を捨てるという事の罪悪感もあって、この5−6年はKindle電子書籍を購入することが多いです。 

Kindleは簡単に買えますし新刊がすぐに読めるのでとても重宝してます。 ですがとても残念なことにMac用に作られたViewerがひどすぎます。 絵が入ったページの後にすぐにクラッシュ。 そして読んでる場所が解らなくなりってのを繰り返すんですよね。 iPhoneとかのアプリは安定しているんですけどね。 おそらくKindle.appがMacネーティブのアプリじゃなくて、JAVAベースとかあるいはPCエミュレーターなんかを使ったWindows系アプリの移植版なんでしょうね・・。 もう読む気がしなくなるぐらいひどいですわ。 Macユーザを馬鹿にするのもほどほどにしてほしいです。 「マッカーのおまえらにはこれぐらいで十分、読めるんだから我慢しとけ、」そんな開発部の思惑を感じます。 

もともとKindleで読み込むE-pubデーターは HTML構文をZIP圧縮した物ですから、そんなに難しいアプリじゃ無いはずなので、クラッシュするとは恥ずかしいと思うんですけどね・・。

Kindleがダメならブックを使えば良いじゃないか

なので私は今はKindle本をAndroid StudioおよびEpubor Kindle ConverterをつかってE-pubに変換したあとで、アップルの純正のブック.appで読んでます。 これが非常に快適なんですわ。 間違ってもコンバートしたE-pubデーターを共有系のサイトにアップロードはしちゃダメです。 それは犯罪ですので。 自分で読む為にコンバートしてください。

 

以前予告していたWeb小説をE-pubにして読むという事の前に、先ずKindle本をE-pubに変更してブック.appで読むという方法を紹介しておこうと思います。 ちなみにEpubor Kindle Converterは有償です。

www.epubor.com

 

これからしばらくの間、この設定方法や使い方の注意、あと横書きを縦書きに変更する方法なんかを紹介してみます。

 

*1:本を裁断して単体の紙に分離させた後、ドキュメントスキャナーを使ってPDFあるいはZIPファイルにして読む方法。紙媒体を電子の画像媒体に変換します

PLEX PX-Q3U4のファンの交換

内蔵ファンを交換して見ました。

PLEX PX-Q3U4の内蔵ファン、やっぱり結構うるさいんで、今日交換して見ました。 ちょっとだけ静かになったけど、完全に無音って訳じゃ無い。 でも夜に鳴ると布団を頭からかぶらないとうるさかった音がちょっとだけ離れるとあんまり感じにくくなるぐらいにはなりましたね。 このチューナに入っているファンは 25mm x 25mmでおそらく厚み10mm程度のファンです。 電圧は 5Vですね。 コネクタはアマゾンで普通で買ってるPH2の2mmピッチの2芯コネクターを購入したんですが、サイズもっと小さかったです。 仕方ないので既存のコネクターをカットして半田付けにしました 1.25mmなのかな? この小さなコネクタってあんまりいろいろな規格が見つからないからちょっと探すの難しいかもですね。

ファンはuxcell DCブラシレスファン

これをつかいました。 ネジは本体に付いてるやつを使いましたが、uxcellがマウント用ネジ 低騒音 抗振動ネジ ソフトラバー ってのを作ってるからそれでも良いのかもしれませんね。サイズは測ってなかったです。 次回交換の時にでも交換して見ます。 ネジじゃなくて先端が膨れてロックがかかるタイプの樹脂型のネジでした。

 

これ買ったんですがサイズ合いませんでした。 もうちょっと小さいやつですね。 今度はノギスでサイズ測って購入して見ましょう。

こっちなんかな? 

カットしてよじって半田付け、熱収縮チューブで絶縁して終了ですね。 

まあ交換しといて良かった気がします。 心なしかブロックノイズが少ない気もするけど、それはプラセボエフェクトかもしれませんな・・。

 

スクリプト以前に俺の日本語が難しい件

以前のFoltiaの記事を少し見直してフォーマットとか、日本語とか直してました。 あと目次とかね。  いや〜 バグ取りも大事ですが私の日本語がいまいちでわかりにくかったです。 簡単に解りやすく書かないとね・・。

私の所のfoltiaサーバーは今は本当に安定して動いてくれてます。 とても満足ですが、最近少しファンの音がうるさいので明日ぐらいに内蔵ファンを静音のもにに取り替えてみようかなって思ってます。 まあ交換も記事にして報告して見ますよ。

とりあえずソフトウエアー上でのfoltiaの監視システムはこれで打ち止めですね。 

 

次は最近私がこっている、Web小説のE-pub化についてちょっと書いてみようかなと思ってます。 最近はアニメやテレビ番組見るより、Web小説を読む時間の方が長いです。 別のページでモンハンの日記も付けてますが、ゲームより最近は本読みたいなーって思うんですよ。 

Web小説はいっぱいあるし、書籍化されるとウェブ上から消えてしまったり、書籍を買ったら先が知りたくてWeb版を読みたくなったり。 でも私どうしてもあの横書きが体が合わなくて日本語の文章はやはり縦書きじゃ無いとね・・。

マックを使ってるといろいろViewerはありますが、iCloudでリンクしてくれる純正のbook.appが秀逸です。 次回の連載はやっぱりWeb小説の著作権問題や諸々の事があるので、自分で楽しむ分だけにしてほしいですし。 小説面白かったら、書籍版を購入したりしてほしいです、作者を育てるってのも大事なんで。 なのでhtmlの切り出し部分はオープンにしない方向で書いてみるつもりしてます。  開始は4月ぐらいからかな?

 

プログラムは外国語を覚えるような物

俺はHello Worldの例をプログラム教本に書くやつが嫌いだ。 実例を書くなら役に立つ物を書けと思う。

英語を流暢に話せる日本人ってちょっと格好いいなーって思います。 自分英語苦手なんで・・・。

でも英語で相手に解りやすく伝える人や、論理的に整理された状態で説明を出来る人達はもっと凄いなーって思います。英語の論文を書く人のための教本なんかには、文章は短ければ短いほど良いという考え方の本もあります。 やっぱり結構プログラムと似てますよね。

私の仕事はプログラマーではなくて、しがない自営業です。 仕事の必要に迫られて今までいくつかプログラムを使ったりしてましたが、プログラミングのプロではないですね。 なので同じ職場にプログラマーが先輩プログラマーがいて、手ほどきをされたり、ビューティフルな構文を見ながら、目から鱗みたいな体験はないです。 インターネット上で掲載されてるプログラミングを見て、そしてまねて、最後にバグと格闘しながら覚えていった感じです。

ゲーム業界とかの方で集まってプログラミングをしている人のアニメとか見ると、「こう言う環境ってうらやましいなー」って思います。 きっときちんとした親プログラマーに仕込まれたプログラマーはプログラミングもネーティブスピーカーみたいに上手いんだろうな。 まあそういう世界だと手取り足取り教えられると言うよりは、俺のコードを見て盗めよって感じの教え方になる事の方が多いと思うんですが、近場でお手本があるって凄いうらやましいです。 俺の隣で誰かアップルスクリプトのコード書いてくれないかな〜。

話しの上手い人のお話って、大体頭の中で全体の流れがあって、それにそって迷い無く文章が組み立てられているから、 「あれ? 俺今何話してるんだっけ」みたいになる人はいないですよね。 全体の基本的なフレームと、その中のサブルーティン、 検証しやすい様に一つ一つの役割を単純に実行して結果を得られるパーツをそれを統合して行く背骨になる骨格。 プログラミングってのはそういうマクロの視点とミクロの視点を同時進行で行っていく作業なわけですよ。 

複雑になればなるほど全体を見渡す集中力が減り、バグが発生する。 完璧だと思って書いたコードが実行させるとズタズタで、全く予想の付かなかったエラーでスタックする。 その検証のために目を皿のようにして2-3時間・下手をしたら1日中考えに考えたりすることもあります。 私のプログラミングは実に泥臭いものです。 

映画アマデウスに出てくるモーツアルトみたいに頭の中にある音楽をただ楽譜にするだけじゃ無いか? みたいなプログラムの天才さんもプロの世界にはいらっしゃるんでしょうね〜。 横でソーッと見ていたいです。

 

Foltiaエンコードエラーの自動解除:アップルスクリプト

目的

最後にFoltiaでMP4にエンコード時のエラーで詰まってしまう物を時間制限を付けて解除する方法を記載しておきましょう。

録画した番組がドロップノイズが多すぎたりすると、CMスキップやエンコードに非常に長時間かかってしまい、オーバーナイトで朝楽しみにしていた番組が全然エンコードされて無くて悲しい思いをされる方も多いんじゃ無いでしょうか? いわゆる便秘・フンズマリってやつですね。 まあ時間制限でCMスキップを解除しちゃうんで長めの映画なんかでCMスキップを解除しちゃう可能性もあるのでその辺は自分の環境に合わせてOn OFFしてもらうしかないでしょうね。 一応記載しておきます。 

アップルスクリプト記述

私の場合、Main_Loop内に以下の様な記載を入れてます。

EncodeStatus(q) of R

その上でFoltiaRecStatus.scpt内に下のハンドラをコピペして入れて見ましょう。

--return EncodeStatus({})

on EncodeStatus(q) #★★完了

     set q to q & {EncList:{}, erro:false, foltia:"foltia"}

     set L to load script file (((path to home folder from user domain) as string) & "Dropbox:Scripts:module:Log_forConsole_pub.scpt") as alias

     

     --set encoder to every paragraph of (do shell script "ssh -4 foltia@" & q's foltia & ".local ps axo comm,pcpu,time,pid k -pcpu|grep -e 'comskip.exe' -e 'ffmpeg' -e 'neroAacEnc'  -e 'BonTsDemuxC.exe' ||true")

     (* ffmpegneroAacEncは機種によっては継続利用されているものもあるようで 解除候補から外したが 機種によっては入れてもよいかも *)

     set encoder to every paragraph of (do shell script "ssh -4 foltia@" & q's foltia & ".local ps axo comm,pcpu,time,pid k -pcpu|grep -e 'comskip.exe' -e 'BonTsDemuxC.exe' ||true")

     --return encoder

     set num to number of encoder

     if (num is 0) then return q

     repeat with i from 1 to num

          set Command to do shell script "echo " & (item i of encoder)'s quoted form & "|sed -e 's/\\([^ ]*\\).*/\\1/'||true"

          set CPU to do shell script "echo " & (item i of encoder)'s quoted form & "|sed -e 's/[^ ]* *\\([0-9\\.]*\\) .*/\\1/'"

          set t_ to do shell script "echo " & (item i of encoder)'s quoted form & "|sed -e 's/[^ ]* *[0-9\\.]* *\\([0-9:]*\\) .*/\\1/'"

          set pid to do shell script "echo " & (item i of encoder)'s quoted form & "|sed -e 's/[^ ]* *[0-9\\.]* *[0-9:]* *\\([0-9]*\\)/\\1/'"

          if (CPU as number < 50) then exit repeat --CPU使用率50%以上のものをチェックする

          set q's EncList to q's EncList & {{Command:Command, CPU:CPU, t_:t_, pid:pid}}

          set LimitTimeMax to "02:30:00" --自分で設定してください。 環境によって時間が違います。

          set LimitTimeMin to "00:40:00" --自分で設定してください。 環境によって時間が違います。

          

          set cmt to ""

          if t_ > "02:35:00" then

               --ライブ録画ffmpeg用に長期過ぎると無視する様に設定する。

          else if t_ > LimitTimeMax then

               LogOnConsole({cmt:"★★★★エンコードに時間が掛かってる物があります", open_:false}) of L

          else if t_ > LimitTimeMin then

               if (Command is "BonTsDemuxC.exe") or (Command is "comskip.exe") then set cmt to "★★★★" & Command & "に作業時間掛かりすぎ、Kill -9 "

          end if

          if cmt is not "" then

               do shell script "ssh -t -4 root@" & q's foltia & ".local \"kill -9 " & pid & "\"||true"

               LogOnConsole({cmt:cmt & "実行しました。", open_:false}) of L

               --slack(cmt & "実行しました。") of L

          end if

     end repeat

     return q

end EncodeStatus

 

これは非常に荒っぽいハンドラなんで、利用は皆さんの好みに合わせて使ってください。 基本は ps axoコマンドで全てのプロセスを取り出した後、comskip.exe  ffmpeg neroAacEnc  BonTsDemuxC.exeというプロセスをgrepで抽出します。 cpu%でソートしてあるのでそれを全部取り出してencoderと言う変数にリスト形式で保管。 encoderが{}ならすぐに終了します。  今回の公開バージョンは、comskipとBonTsDemuxCだけに限定してます。 その理由は最後に記載しておきましょう。

その後はrepeatを使って、アイテムを一つづつ取り出し、プロセス名 CPU プロセス時間(t_) pidを抽出、 CPUが50%以下になったら終了させるように設定しておきます。 

q's EncListという変数に上記のパラメーターをレコード値で格納しておきましょう(動作確認のためで、プロセス実行には使用しません)。

時間制限は全体でLimitTimeMaxを越えるプロセスがあれば5分間だけログにエラーが出るようにしてますが、実際にはcomskipとBonTsDemuxCに限定してますので、LimitTimeMaxが動作することはないはずです。 LimitTimeMinを越えると自動的にBonTsDemuxCとcomskipはroot権限でkill -9 <pid>されて強制終了されます。 なので自分でLimitTimeMinの中の値を自分の環境でセットしてみてください。 私の環境だと2時間番組とかでも40分以内に終わっているようなので40分にセットしてます。

 

このハンドラは今は自動で設定しましたが、手動でBonTsDemuxCとcomskipを kill -9する様に設計しても良いかもしれませんね。 大体録画したキャプションを見ると、もう絵がベットリスマッシュされてて、視聴出来ない番組を永遠に時間を掛けてエンコードしているわけで、それをKillして次の番組に行ってもらうという事になります。

簡単な事でMainReOpen内にこのEncodeStatusを入れてやればよいわけですね・・・。

 

最後に

これで一旦フォルティアMacによる監視システム構築の本文は終了です。 しばらくは今までの原稿をもう一度見直して読みやすい様にもう一度編集して見ようと思います。

次のシリーズはウエブ小説をE-pub形式に書き出す方法をちと御紹介しとこうかなと思ってます。