sironekotoroの日記

Perl で楽をしたい

続・はじめてのPerl 第2版 第18章〜21章 & 近況的な

おわった

  • といっても、終盤のオブジェクト指向のあたりはチンプンカンプンで
    • 自分のプログラムに生かせる気が全くしない
  • オブジェクト指向は難関、ってことは知っていたので、よく分からなかったらスルー、という方針はたてていた。
    • 他にもPerlオブジェクト指向本あるから、そちらに期待というのもある。
    • 一冊で分からなければ、他の本を読むのさー
      • 割と贅沢な考え方

近況的な

  • JavaScriptオライリーの「HeadFirest JavaSCript」で基礎固めしつつ、興味のあることはググル先生に聞きながらどんどん実装
  • おかげで、業務を楽にするuserscriptが完成。
    • 完成当初はめっちゃ感動
    • 翌日にはそれが当たり前に
    • 感動の賞味期限は短い

ユーザースクリプト1号

  • あるお仕事のフロー
    1. 対象機器を認識するための認識番号(数字6桁or12桁)をWebアプリ画面で入力する
    2. 検索ボタンを押す
    3. 対象機器の情報が表示される(表示されない場合には入力間違い)
      1. 認識番号を選択し、クリップボードにコピーして、Teratermsshする(Teraterm マクロはクリップボードにある情報をもとに接続を行う)
      2. 必要があれば、表示されたその他の情報(IPアドレスなど)からホスト名をnslookupで検索する
  • こんな感じ
  • これをUserScriptとPerl(Mojolicious)でこんな感じに

    1. 対象機器を認識するための数字(6桁or12桁)をWebアプリ画面で入力する
    2. 検索ボタンを押す
    3. 対象機器の情報が表示される。
      1. 認識番号の横に「copy」ボタンを用意。ボタンを押すとクリップボードに認識番号がコピーされる
        1. 認識番号が表示されているDOMにform,inputタグを追加
        2. execCommand("copy")を使ってクリップボードにコピー
      2. IPアドレス横にnslookupしたPTRレコードも一緒に表示されている。
        1. userscriptでIPアドレスが記載されているDOMからIPアドレス抜き出し
        2. ローカルでたてたmojoliciousにhttpでリクエストし、ipアドレスの名前解決を依頼。なお、superagent.jsではなく、XMLHTTPRequestを使った。JSONP使って受け取りたかったけど、コールバック処理がどうしてもうまくかけなかった。
        3. mojoliciousがGoogle DNSで名前解決をしてhost名を返す(Net::Nslookup利用)
        4. 帰ってきたhost名をIPアドレスが記載されているDOM内に追加
  • ハラショー!

    • ほんとは、「copy」ボタンを押すとそのままTeraterm立ち上がりsshするってのが理想なんだけど、それは無理そうな?
    • nslookupをJavaScriptだけで実現する方法も見つからなかったんで、喜んでPerl利用

現実変えちゃう

  • この業務アプリ、10年近く使っているものなのだけど、「こういうものだ」と思っていて改善の対象ではない、と思ってたんよねー
  • それがJavaScriptPerl知ったおかげで「改変可能なフィールド」になった訳です
  • すごい
  • で、そういう視線で見ていくと他にも改善できそうなところがいっぱいある訳で
  • 「大きな公園で、どの遊具で遊ぼうか迷っている子供」の気分
  • なので最近出社が楽しかったりしますw