express-generatorでRSS解析

私は、あまりwebプログラミングをしてきませんでした。

夏ごろから勉強をしております。

一応Python + Djangoで一冊こなしたものの、Node.jsが気になって仕方がないので、今回勉強しています。

今は、express-generatorをインストールして、VS Codeでjs, ejsを編集してきました。

ところが、今回エラーに遭遇したので、投稿しました。

RSSを受信してクライアントに表示するコーディングをしていました。

最初、以下のようなコードを、jsに置きました。

const express = require('express');
const router = express.Router();
const http = require('https');
const parseString = require('xml2js').parseString;

/* GET home page. */
router.get('/', (req, res, next) => {
    var opt = {
        host: 'news.google.com',
        port: 443,
        path: '/rss?hl=ja&ie=UTF-8&oe=UTF-8&gl=JP&ceid=JP:ja',
    }
    http.get(opt, (res2) => {
        var body = '';
        res2.on('data', (data) => {
            body += data;
        });
        res2.on('end', () => {
            parseString(body.trim(), (err, result) => {
                var data = {
                    title: 'Google News',
                    content: result.rss.channel[0].item
                };
                res.render('hello', data);
            });
        });
        res2.on('error', function(err) {
            console.log("something wrong");
        });
    });
});
module.exports = router;

これを、VS Codeのターミナルから npm start コマンドで起動したのですが、ブラウザでは一応は表示されるようなのですが、サーバーは落ちました。

node:events:371

      throw er; // Unhandled ‘error’ event

      ^

Error: read ECONNRESET

    at TLSWrap.onStreamRead (node:internal/stream_base_commons:211:20)

Emitted ‘error’ event on ClientRequest instance at:

    at TLSSocket.socketErrorListener (node:_http_client:447:9)

    at TLSSocket.emit (node:events:394:28)

    at emitErrorNT (node:internal/streams/destroy:157:8)

    at emitErrorCloseNT (node:internal/streams/destroy:122:3)

    at processTicksAndRejections (node:internal/process/task_queues:83:21) {

  errno: -54,

  code: ‘ECONNRESET’,

  syscall: ‘read’

いろいろ調べて、エラー補足できていないのかと考え、

        res2.on('end', () => {
            console.log('end');
            parseString(body.trim(), (err, result) => {
                if(err) {
                    console.log('err:'+err);
                    throw err;
                }
                console.log(result)
                var data = {
                    title: 'Google News',
                    content: result.rss.channel[0].item
                };
                res.render('hello', data);
            });
        });
        res2.on('error', function(err) {
            console.log("something wrong");
        });

などとしてみましたが、補足できず、変わりませんでした。

最後に、OSのターミナルでは、環境が違うのか?と気付き、実行してみると、正常に動きました。

そこで、問題は、expressコマンドのパスが通っていないことが原因だとわかりました。

Windows10 マルウェア感染

こんにちは、蔭山ソフトです。

先日、ASUS S550に入れているWindows10が起動しなくなったので、投稿します。

購入は8.1だったのですが、何年か前に10に無料アップグレードしました。

もう彼是開発用に10年ほど使っているでしょうか。

先週、Chromeから右クリックで検索すると、何々us.yahoo.comの検索結果がランダムに出るようになりましたので、調べてみまして、マルウェアを疑いました。

さらに、Chromeの右メニューリストの最後に、組織によって管理されていますが出ていたので、これは大変だと、マルウェア駆除ツールを探しました。

普段からESETをリアルタイム有効にしているのに、何も出ませんでした。

その結果、MalwareBytesというツールがよさそうという判断で、検査すると、結果は0件。。

おかしいので、今度はHitManProというツールがあるとのことです。

この後も別の対策ソフト(zemana antimalware, AdwCleaner)を入れた記憶があります。

で、で、2件のレジストリエントリが検知され、駆除しました。

それが原因なのか、起動しなくなりました。

AdwCleanerかもしれません、ダウンロードしたのは、Windows 8までしか対応してなかったみたい。

スタートアップ修復失敗、コマンドプロンプトでのコマンドによるブート修正でもだめ。。。

苦しんで、ハードディスクは正常。

そしてあとで気づいたのですが、レジストリエントリがいくつか壊れたのが原因のようです。

そして、レジストリをハイブ(NTUSER.DATなど)から回復できないかと考えて、regeditで読み込みましたが、なんと、中身が以前とまったく違い、環境変数などがないのです。

驚きました。

では、Windowsが保存しているsystem32のレジストリバックアップは、と探してもないのです。

なんと、Windows10のあるバージョンからは、バックアップしてないー

Microsoft Documentにこっそり書いてありました。

というわけで、イベントログを探したところ、やはり、駆除したあとから、エラーが頻発しています。もともといたマルウェアがそのように仕組んだのか、それとも駆除したとき壊されたのか。。

要するに、たぶんですが、重要なエントリが壊されたので、読み込めなくなって、Windowsが修復できないと判断したのでしょう。srtログなどにも、システム構成に対する特定できない変更が原因です、というメッセージ。

今回は、システムバックアップを最後にしてなかったのが、大きなミスです。

ハードディスクは常にチェックしており、健全だったので、回復コストは低いです。

windows keybd_eventとsendinput

私は、長い間、点字ソフトに取り組んでいます。

実は、日常使っているPCは、Insider Previewを受けています。一時的に停止していますが。。

点字ソフトを作るうえで必須なのが、キーイベントをかすめ取って、キーを変える機能です。

昨日、VK_KANJIを送ろうとして、keybd_eventやsendinputを送ってみましたが、何の反応もないので、なぜ?と探ってデバッグしてみたところ、VK_KANJI(0x19)は、VK_HANJAとして認識されているではありませんか!

ええ!?というわけで、韓国語設定した覚えはないのにと、絶望かあ?と危惧していると、別のWindows8.1やWindows10ではうまく認識されました。

そう、Insider Previewが原因としか思えません。

 

形態素解析辞書縮減編集

昨年から、点訳エンジンを作成し、開発を大体終えました。

Linux環境では、今年前半で動きましたが、客先の要望から、Android環境での利用をすることになっており、ポーティングが必要でした。

私としては、mecabを主張し、受け入れられました。辞書は、mecabの基本辞書と、NeoLogdをシステム辞書に統合して使いました。

Android環境では、Native Interfaceを使って呼び出したいとのことなので、インタフェースを用意したり、mecabのポーティングをしたり、辞書を編集したりと大変でした。

最も時間がかかったのは、客先の使用するハードウェアのメモリが小さいため、辞書を縮減しないととても使えないということです。

NeoLogdを使うと 800MB近い!という難題です。

調べると、記号で始まるエントリーやひらがな・カタカナで始まるエントリー、超長いエントリー、テレビ番組名、芸能関係、絵文字、なんともはや行数が100million単位です。

これを半分にしたい!という目標のもと、プログラムを別に作って、削減に取り組んでいます。

さらには、点訳エンジンなので、分かち書きのための追加作業も待っています。

毎日作業の連続です。

ステッピングモーター・セミナー

先日、オリエンタルモーター社のセミナーに参加させていただきました。

ステッピングモーター実践講座で、女性講師が3時間ほどにわたり、丁寧に指導してくださいました。

会場のみやこめっせの専用部屋は満杯状態で、各テーブルに2名座り、間に、実機と操作盤が置かれていました。

午前は、理論を教えていただき、午後は、実践編といった感じで、指導が適切なので、非常に面白かったです。

私の定義

私という応用情報処理技術者は、20代から存在していた。だが、初めはどでかい制御コンピュータを前に、固いボタンを押して、図面やデータを作っていただけだった。

それは、机がコンピュータのデスクトップというか、ディスプレイとコンピュータが一体の代物であり、ディスプレイとキーボードが目の前にあって、足の前にまでその本体があり、専用の機械で、専門の社員が配置していた。フロッピーディスクは5インチ。何枚ものFDを大事に持ち歩いていた。

データ元は、工場に何をどう配置・制御するかを専門技術者が客先と話して決めた図面だった。水力発電所、火力発電所など、巨大な産業の事業者が注文されるので、さまざまなコンポーネントが並んでいた。

あまり深い知識は必要なかったので、5年間お世話になり、最後の数年はパソコンも導入されてきた。まあ、専用のパソコンなのだが。。