たまに掃除は必要!熱暴走…

イメージ
 そんなに暑くないのに… 本日、午前中にオンラインで打合せをしていると、突然マシンがダウン。 一瞬、停電か?と思ったもののディスプレイの電源は入っている。 あれっ?と思い、すぐさまノートで打合せを継続。 その間に、再度マシンの電源を投入。 問題なく起動する。 でも、CPU温度がたまたま目に入り、95℃を超えて徐々に上昇していく。 105℃あたりで再度マシンダウン。 これは、熱暴走によるダウンの可能性が高い。 以前、CPUをRyzen7→9にした頃は、60℃〜70℃程度だった記憶がある。 本当はGW中にSSDの載せ替えを行う予定だったけれど、忙しくて先延ばしにしていた。 その時やっていれば、多分掃除もしただろうに…。 ということで、午後からマシンを解体し、掃除をすることに。 ケース本体のFANはホコリがかなり溜まっている。 GPUのFANは問題ない。 電源とCPU FANはひどい。 一旦、CPU FANを取り外し、きれいにする。ついでにCPUグリスも塗り直しセット。 動作確認すると、投入直後で40℃台。 そりゃ、熱暴走も起こすわけだ。 せっかくバラしたので、SSDの載せ替えを実施。 OSは500GBで、ユーザ領域(/home)は1TBを使用しているもののAIのmodelをいくつも落としていたり、DockerのImageが多種置いてあるため、結構容量を食っている。 今回、2TBのSSD( Hanye SSD ¥17,800- で入手済)を用意してあるので、 1TB→2TB, 500GB→1TBと玉突きで移動させることを計画していたので実施する。 本当は、ddコマンドで移すつもりだったのだけれど、3月にお客さんのところで使いそうだったので、 ORICOのクローン機能付SSDアダプタ を入手済。 裸族のSSD版ですね…。1万円程度の品です。 これに、新品のSSDとこれまでの1TBのSSDを差し込んでクローン開始。 そこそこ時間はかかるものの、放置でOK。 ただ、HanyeのSSDについているヒートシンクが引っかかるため、一旦取り外してクローン後取り付ける必要があった。 続いて、500GB→先程の1TBに書き込み。 ただ、1TB(samsungの980pro)が、先程のクローンでかなり熱くなっていたため、速度低下が激しい感じ。1TB→2TBよりも時間がかかった感じ。 ...

perlで不要なタグを削除

素人すぎですよ

製作途中で放置されているサイトの依頼を受けて、少し前からチェック等していましたが…。
確かに、それなりに表示されているものの、中身がひどくてメンテナンスをどうやるか悩むレベル。

いろんな情報を提供する目的なんだろうけど、元のファイルをコピーして書きなおしている感じで、DBも使わず、サーバサイドで処理もせず、CSSもほぼなし。
ざっと300ファイル(全部html)で、やたらと全角スペースでレイアウトされているstaticなページ。

これを直すのは正直嫌です。
しかも、各ファイルの先頭に
<script type="text/javascript">if ((navigator.userAgent.indexOf('iPhone') > 0 &&navigator.userAgent.indexOf('iPad') == -1) ||navigator.userAgent.indexOf('iPod') > 0 || navigator.userAgent.indexOf('Android') > 0) {location.href = '/smartphone/';}</script>
そして、smartphoneフォルダには何もない。
だから、PCと同じページを見に来るとNot Found多発地帯という地雷まで完備。

この設計意味が分かりません。変更が発生した場合は、どうするつもりだったんでしょう???
1つずつ直すのか?それとも、何かジェネレータプログラムが作ってあって、ガシガシと吐き出しているのだろうか?

スマートフォンでも見えるように修正

まずは、現状のhtmlを見せれば、not foundは解決するので、scriptを無効にしたい。

とはいっても、300も1つ1つ直すのはコンピュータ使いのやることじゃない。

ここはperlでサクッと処理したい所。
調べてみると、TreeBuilderが良さそう。こんなことがなきゃ、この手のライブラリを使うことも無いだろうなんて思いながら、テストコードを書いてみる。
 # perl -MCPAN -e shell
でHTML::TreeBuilderをインストール。
結局XPathも使おうかと思ったけれど、不要だった。

結構、簡単にパース処理してくれて、特定のタグだけをfindして削除とか、置換とかできるようなので、一気に書き上げる。

#!/usr/bin/perl

use strict;
use utf8;
use HTML::TreeBuilder;
use HTML::TreeBuilder::XPath;
use Encode::Guess;
use File::Copy;

# main
foreach my $filename(@ARGV){ 
    convert_html($filename);
    
}

sub convert_html{
    my $filename = shift @_;
    open( IN, "<$filename" );
    local $/ = undef;
    my $html = <IN>;
    close(IN);
    
    $html =~s/charset=Shift_JIS/charset=utf-8/;
    
    my $decoder = guess_encoding($html,qw{shift_jis euc-jp jis});
    my $decoded = $decoder->decode($html);
    
    my $h = HTML::TreeBuilder->new;
    
    $h->parse($decoded);
    $h->eof;
    
    for my $node ($h->findnodes('//script')){
        $node->delete();
    }
    $html = $h->as_HTML("<>&", "  ",{});
    $h->delete;
    
    move $filename,"$filename.orig" or die;
    open(OUT,">$filename");
    print OUT $html;
    close(OUT);
}

$htmlにファイルをまとめて読み込んで処理する流れ。

元のファイルはShift-jisなんで、こいつはutf-8に変更する。ついでにmetaタグも直しておかねば…。
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />
を書きなおしておこう。
$html =~s/charset=Shift_JIS/charset=utf-8/;
これは、単なる置換で処理。

でもって、scriptタグを見つけては、すべてdeleteする。$node->delete()の部分です。

最後に、元のファイルは.origを付けて保管し、処理したhtmlを元の名前で吐き出して終了。

あとは、コマンドラインからfindかけて、ファイル名を流し込んで終了。
とりあえず、2〜3ファイルを食わせて、問題ないのを確認。

自分で使うツールなので、細かなエラー処理とか一切なしモード。
確認ができたので、一気に、全部行きます。
$ find ./dir -name '*.html' | xargs perl del_script.pl
はい、これで完了しました!!

こんなの、手作業で直してたら、気が狂うわ。

参考にした所


  • http://yoshiiz.blog129.fc2.com/blog-entry-382.html
  • http://d.hatena.ne.jp/metalglue/20100126/1264492726


コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?