Archive for the ‘stenretni’ Category

PowerShellでキー入力の自動化

月曜日, 4月 3rd, 2017

stenretniです。インフルエンザと花粉症でなかなかマスクをはずすタイミングがつかめません。

stenretniはAutoHotkeyなどでキー入力を自動化するのが好きなのですが、触るPC全てにこのソフトを入れるわけにもいきません。Windows標準での手段をここ数年探していたのですが、最近PowerShellから.NETのメソッドが一通り呼びだせることに気がつきました。.NETにはSendKeysという人間と同様のキー入力をしてくれる命令があるので、これを使えば(少なくともWindows 7なら)ダブルクリックをするとキーボード入力が走るバッチが書けます。

以下はメモ帳を使った例です。

@powershell -NoProfile -ExecutionPolicy Unrestricted "&([ScriptBlock]::Create((cat -encoding utf8 \"%~f0\" | ? {$_.ReadCount -gt 2}) -join \"`n\"))" %*
@exit /b
# ↑ PowerShellスクリプトをbatにラッピングするためのおまじない

# SendKeysを使えるようにする
add-type -AssemblyName System.Windows.Forms

# 前面にあるウィンドウにキーボード入力を送る
function send([string]$key)
{
  [System.Windows.Forms.SendKeys]::SendWait($key)
  sleep 0.5
}

start notepad
sleep 1
send "Hello, world!"

実用するには、キー入力が望むウィンドウに送られることが大事です。そのため、ウィンドウを切り替えたりウィンドウが切り替わるのを待機したりしたいことがあります。これにはVisualBasicのAppActivate命令が使えます。

(他にもMicrosoft.VisualBasic.Interactionには便利そうなメソッドがいくつかあります)

add-type -AssemblyName Microsoft.VisualBasic

# 指定のタイトルのウィンドウを探して、前面に持ってくる
function activate_window([string]$title)
{
  [Microsoft.VisualBasic.Interaction]::AppActivate($title)
}

# 指定のプロセス名のタイトルを取得
function get_process_window_title([string]$process_name)
{
  return [string](Get-Process $process_name | select MainWindowTitle)
}

# 指定のプロセス名のタイトルに指定の文字列が含まれるか調べる
function title_contains([string]$process_name, [string]$title)
{
  $got = get_process_window_title($process_name)
  return ([bool]$got) -and $got.Contains($title)
}

# 指定のプロセスのメインウィンドウのタイトルが指定のものになるまで待つ
function wait_while_window([string]$process_name, [string]$title)
{
  while (title_contains($process_name, $title))
  {
    sleep 0.25
  }
}

# 指定のプロセスのメインウィンドウのタイトルが指定のものでなくなるのを待つ
function wait_until_window([string]$process_name, [string]$title)
{
  while (!(title_contains($process_name, $title)))
  {
    sleep 0.25
  }
}

PlantUMLというツールのこと

水曜日, 10月 26th, 2016

stenretniです。
本社前のイチョウはまだ緑色をしていますが、ちょっとしおれてきた気がします。

いちょう

フリーで使いやすいUML図を書くツールをずっと探していたのですが、鉛筆と紙を超えるものがなかなかありませんでした。最近はPlantUMLというツールがとても自分好みのインターフェイスで気に入っており、愛用しています。メモ帳で書いたファイルを読ませると、SVGやPNGといった画像が出力されます。日本語にも対応しており、文法リファレンスも翻訳されています。とっかかりでは紙に優るものはありませんが、自分の場合はあとから見返すとき字が判読できるというのがよいところです。

コンポーネント図の例です。

plantuml

@startuml

left to right direction

node foo {
    component a
    component b
    component c
    node bar {
        component d
        component e
        component f
    }
    node baz {
        component g
        component h
    }
    component i
}

cloud hoge {
    component j
    component k
    component l
}

d --> h : "依存"
d --> e : "依存"
a --> d : "依存"
a --> h : "依存"
a --> b : "依存"
a --> c : "依存"
a --> e : "依存"
a --> i : "依存"
a --> f : "依存"
a --> g : "依存"
l --> g : "依存"
j --> c : "依存"
i --> d : "依存"
f --> h : "依存"

@enduml

その他、最近見つけたものです。

  • Windowsのイベントビューアはフィルタやソートの反応が悪く扱いづらいのですが、.evtxファイルに保存すればPowerShellでCSVに変換できるということを最近知りました。一旦CSVにしてしまえばあとは煮るなり焼くなりできます。

    Get-WinEvent -Path hoge.evtx | Export-Csv -encoding Default -notypeinformation -path hoge.csv

    イベントを扱うコマンドにはGet-EventLogGet-WinEventの二つがありますが、後発の後者のほうが読み取れるイベントが多いそうです。

  • Delphi(とC++Builder)の無料版が復活したそうです。6の頃からC#に対抗してだいぶ機能が増えていると思うので、一度触ってみたいです。

Windows 10更新後落ちた落とし穴

月曜日, 7月 4th, 2016

stenretniです。帰り道カニを見かけました。

kani

先週大分本社と東京支社の若手スタッフの間で、発表会というかたちで顔を合わせてお互いに業務の様子を共有しました。メールの連絡だけでは読み取れなかった事情や知らなかった専門用語の解説などが聞けて、とても楽しかったです。皆さんありがとうございました。

最近開発機をWindows 10にアップデートしました。

3時間ほどは機嫌よく動いていたのですが、それから奇妙な現象が起きました。解像度を変更するときのように、画面がゆっくり明滅を繰り返すのです。これではまともに操作できないと再起動した所、今度はログイン画面が表示されなくなりました。

開発機にはグラフィックボードが入っているので、原因はそのドライバの関係だろうと考えました。他の端末で調べてみたところ、Windows 10では再起動せずに適用できる更新は確認なくその場でインストールされるようです (たとえそれが不具合のあるグラフィックドライバでも…)。

ドライバのアンインストールならセーフモードの出番ですが、ここでもうひとつ落とし穴に落ちました。Windows 8以降、F8キーを押してセーフモードに入ることはできません。設定でF8を有効にすることはできますが、そのためにはまずWindowsを正常に起動する必要があります。

F8キーを有効にしておらず、リカバリメディアを作ってもいないマシンでセーフモードに入る方法は、ブート中電源断を3度繰り返すという、ちょっと心臓に悪いものでした。

セーフモードに入ることは出来ましたが、そちらも同様の画面の明滅が起きて入れませんでしたので、回復環境のメニューにあった再インストールボタンを押しました。

再インストール後は、ふたたび不具合入りのドライバがインストールされてしまうのを防ぐため、ドライバをWindows Updateから受信しない設定に急いで切り替えました。(あとから考えると、ネットワークを切っておけば急ぐ必要はなかったと思います)

その後は比較的安定しています。Win+TabでMacのような仮想デスクトップが使えるようになったのが嬉しいです。

Chromeがテキストエディタとして便利

日曜日, 3月 6th, 2016

stenretniです。先月庭の梅が咲きました。

梅

最近、ChromeやFirefoxの開発者ツール付属のテキストエディタがマルチカーソルに対応していることに気がつきました。

まず、Chromeをテキストエディタとして使うまでの手順です。

  1. F12キーを押して開発者ツールを開きます
  2. Sourcesタブを押してソースエディタを開きます
  3. エクスプローラから開発者ツールにフォルダをドラッグします
  4. 許可のボタンを押します
  5. 左のファイル一覧にフォルダが現れます

一度ここまですませておけば、ファイル一覧に加わったフォルダはそのまま残るので、その後はF12からすぐ使えます。

ブラウザにドッキングしたままだとちょっと狭いので、右上の「・・・」からウィンドウに分離することをおすすめします。

ファイルを開く(Ctrl+P)と、そのマルチカーソルを使って編集ができます。

  • Ctrl+Dを繰り返し押すと、ファイル内の同一の単語を選択できます。
  • Ctrlを押しながら左クリックすると、クリックしたところにカーソルが増えます。
  • Altを押しながら上下にドラッグすると、ドラッグしたところにカーソルが増えます。

マルチカーソルの操作感は言葉で説明しづらいので、Visual Studio CodeのページSublime TextのトップページのアニメーションFirefoxの開発者ブログの記事をご覧ください。(それも面倒な方のためにgifを引用しておきます↓)

editor-multiple-selection

テキスト置換でも同じことができますが、マルチカーソルは正規表現に頭をひねる必要がなく気楽に使えます(形に残らないのでスクリプトで再利用しにくいのが玉に瑕ですが)。

インデックスを使え、ルーク

月曜日, 11月 30th, 2015

ブログに初参加のstenretniです。先日ベランダに三毛猫が来たのでいりこをやりました。

mike

今月見つけたものです。

  • Use the Index, Luke というSQLの初心者向けサイトを見つけました。説明が具体的で有難いです。
  • HeidiSQL というSQLサーバの管理ツールが軽くてよかったです。
    サイトのスクリーンショットと違って、使ってみると日本語に対応していました。
  • 最近Rebuild.fmというPodcastを古い収録から順に追っています。
    ゲストもホストもプログラマばかりなので話題が濃ゆくて楽しいです。
  • Selenium(セレニウム)という、ブラウザを自動操作できるツールを使ってデバッグの楽ができないかと思って試していました。
    公式サイトの物はいまいちうまく動かなかったのですが、Selenium Builder というFirefoxプラグインを見つけてからぐっと実用になりました。
    単独でブラウザの操作を記録して再生できたり、Javaコードなどの形でエクスポートできます。エクスポートされたコードはFirefox以外のブラウザを動かすこともできます。

追記: コメントありがとうございます。過去ログを読みかえしていたら、SQLのサイトはmoshaさんも紹介されていました。stenretniも含めて、少なくとも4人には興味を持たれているようですね。日本語化されていない分も面白いので、読み進めながらときどきブログに抜き書きしていきたいと思います。