雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

負荷テスト用ツール(CPU)

負荷テストで使えるツールについてメモ。Microsoftで公開している「Windows Sysinternals」から入手できるものを中心に。

この記事にまとまっています。
https://blogs.msdn.microsoft.com/vijaysk/2012/10/26/tools-to-simulate-cpu-memory-disk-load/

○ CPUSTRES.EXE
上記サイトからダウンロードできます。本家Sysinternalsのサイトでは探し方が悪いのか見つけられず。
ダウンロード後、exeファイルをダブルクリックで実行し、表示されるGUIベースで操作します。

f:id:saborin-2002:20170311234040p:plain


「Thread」が4つ表示され、複数スレッドで負荷をかけられます。複数コアに対して負荷をかける際に有用です。
使いたい「Thread」の「Active」にチェックを入れて有効にします。
Thread Priorityは、他のプログラムに対する優先度を設定するようです(適当)。普通は「Normal」で問題ないと思います。
Activityは、負荷のかけ度合を段階的に設定します。「Low」「Medium」「Busy」「Maximum」とあり、
それぞれ「約15%」「約25%」「約55%」「100%近く」の目安です。
あとはそれらを組み合わせて、テストで必要な負荷をかけ続けます。
パフォーマンスモニターで見ると、実行中多少のゆれ幅があります。

f:id:saborin-2002:20170311234105p:plain

PowerShellの関数(ファンクション)の考え方

(参考としてリンクさせていただいたURLの筆者の皆様ありがとうございます)

別ファイルに分けて関数化する方法
→ファイルを作って、「. “C:\fso\include.ps1"」のように「ドット、スペース、フルパス」で呼び出し元ファイルに記載(これを「スクリプトをドット ソース形式で使用」という)

以下を参考にしました。(いつものScripting Guy)
https://gallery.technet.microsoft.com/scriptcenter/b590021a-b311-47f9-8f48-3809658b7cbf

ところが、「戻り値はどうやって指定するんだろ」と疑問を持った途端に、
PowerShellの仕様の壁(基本らしい)にぶち当たりました。
「関数内で値が出力されると、returnキーワードがついてなくてもすべて呼び出し元に出力される」ということで、
作成したファンクション内の値出力が全て返ってきます。
(参考)
http://stknohg.hatenablog.jp/entry/2015/07/05/114903
http://winscript.jp/powershell/253

いや、純粋に計算結果で出た一つの値だけを返したいんだけど、と探した結果、以下のサイトにとても分かりやすく書いてありました。
http://tyru.hatenablog.com/entry/2015/11/08/004204

で、以下のサンプルソースを作ってみました。

Moto.ps1

# 引数1:文字列

# ファイルのパスを情報取得
$scriptPath = $MyInvocation.MyCommand.Path
$nofilePath = Split-Path -Parent $scriptPath

# Function取り込み
. ($nofilePath + "\Include.ps1")

# Functionにより値変換
$pTaro = fncAddTaro($args[0])

echo $pTaro



Include.ps1

# ファンクション
# 文字列が「ピコ」を含めば「ピコ太郎」を返す
# 文字列に「ウルトラ」を含めば「ウルトラマンタロウ」を返す
# それ以外は「たろー」を付加して返す
Function fncAddTaro($strMoji) {

  $rtnVal = ""
  .{
     if ($strMoji.Contains("ピコ")) {
       $rtnVal = "ピコ太郎"
       return # ここで「.{ }」ブロックを抜ける
     }

     if ($strMoji.Contains("ウルトラ")) {
       $rtnVal = "ウルトラマンタロウ"
       return
     }

   $rtnVal = $strMoji + "たろー"
   return
   } | Out-Null  # 「.{ }」ブロックの中の出力は戻り値に含めない

return $rtnVal

}



実行結果

PS > .\Moto.ps1 "パピコ"
ピコ太郎
PS > .\Moto.ps1 "ウルトラクイズ"
ウルトラマンタロウ
PS > .\Moto.ps1 "ワルトラ"
ワルトラたろー
PS > .\Moto.ps1 "山下"
山下たろー

指定したExcelファイルのシート名を全て取得するPowerShell

表題の件、スクリプトを作成しました。
業務をしていてあると便利だな、と。

# 指定したExcelのシート名を全て取得するPowerShell
# 引数1:ファイル名

# ファイルのパスを取得
$scriptPF = $MyInvocation.MyCommand.Path
$scriptPath = Split-Path -Parent $scriptPF

$filePF = $scriptPath + "\" + $args[0]

# ファイルが存在する場合に処理
if (Test-Path $filePF) {

  # Excelのオープン
  $objExcelAp = New-Object -ComObject Excel.Application
  $objExcelAp.Visible = $true

  $objExcelBook = $objExcelAp.Workbooks.Open($filePF)

  $objExcelBook.Sheets | ForEach-Object {
    $_.Name | Out-File ($scriptPath + "_AllSheetsName.txt") -Append -Encoding Default
  }

  # ファイルを閉じてExcelの終了
  $objExcelAp.Quit()

  # 各変数を解放(.ブロックでOut-Nullしているのは実行すると「0 0 0」と表示されるため)
  .{
     [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcelBook)
     $objExcelBook = $null
     [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcelAp)
     $objExcelAp = $null
  } | Out-Null

  # ガベージコレクトの明示実行
  [GC]::Collect()
  [GC]::WaitForPendingFinalizers()
  [GC]::Collect()

}

テキストファイルの各行頭もしくは行末に文字列を挿入

表題の件、スクリプトを作成しました。
業務をしていて、あると便利だな、と。

# テキストファイルを1行ずつ読んで書き込む【行頭に特定文字】
# 書き込むファイル名はc_+<読み込むファイル名>
# 引数1:ファイル名
# 引数2:挿入文字列

$file = ".\" + $args[0]

# ファイル存在する場合に処理
if (Test-Path $file) {

  # 読み込み挿入書き込み
  foreach ($line in Get-Content $file) {
    $args[1] + $line | Out-File (".\c_" + $args[0]) -Append -Encoding Default
  }

}

途中を少しだけ手を加えると、行末に挿入になります。

# テキストファイルを1行ずつ読んで書き込む【行末に特定文字】
# 書き込むファイル名はc_+<読み込むファイル名>
# 引数1:ファイル名
# 引数2:挿入文字列

$file = ".\" + $args[0]

# ファイル存在する場合に処理
if (Test-Path $file) {

  # 読み込み挿入書き込み
  foreach ($line in Get-Content $file) {
    $line + $args[1] | Out-File (".\c_" + $args[0]) -Append -Encoding Default
  }

}

「速効! 振り飛車の絶対手筋105」を解いていく

先日の「将棋基本手筋コレクション432」の次にやるべき次の一手本は何か…振り党としてはまずはこれでしょうか。

速効! 振り飛車の絶対手筋105 (マイナビ将棋BOOKS)

速効! 振り飛車の絶対手筋105 (マイナビ将棋BOOKS)

前回同様、正答率を記録しながら解くことにしました。
今度は、納得する正答率になるまで何周かやってみる予定です。
この本の構成として例題と問題集形式が混在していますが、例題も問題集の1問とみなして解いていくことにします。

で、1周目、知らない手筋ばかりで正答率はほぼゼロ。
いかに必修手筋を押さえていないかが浮き彫りになりました。
現在2周目。半分弱解いて、正答率3割ぐらい。一度じゃ覚えないもんだなあ。
マスターすれば、中盤の多くの場面で指針を得られる気がするので、
コツコツと繰り返し解いていこうと思います。

中盤の考え方について思うこと(心理編)

よし、理論は確立した、ではこれを実戦で・・・これがなかなかできないんです。
なぜか。端的に言ってしまうと、「いざ実戦ではすっかり頭から消え去ってる」から。
これ、おそらく当てはまる人と無縁な人がいて、自分は将棋以外の分野でも課題になっている現象です。無縁な人は何のことやら、いとも簡単に実践できる。
できない時の状態を言語化してみると、「精神状態が変わることで事前にやろうと決めたことが頭に浮かばない」。対局中はおそらく以下の要素が混ざって心を圧迫しているようです。
 ・「勝ちたい」という気持ち
 ・没頭して深く考えようとする気合い
 ・制限時間のプレッシャー
これらにより、結局これまでの考え方に頼ることでこれまでの考え方の癖が強く出てしまい、読みへのアプローチが固定化されてしまう。

ではどうするか、ですが、方向性としては以下の2つと思います。
 A.対局中の精神状態を冷静な状態に近づける
 B.精神状態が普段と違うことを認め、その状態でも新しい考え方を実践できるようにする

ここで参考にする知識ですが、まず自分の話をすると、先述した「将棋以外の分野」というのは、とあるスポーツ(球技)です。練習でできることが、試合で出せない。
「この試合中この技を試すことをテーマにしよう」と試合前考えていても、いざ試合になるとすべてふっとんで、練習したこともないようなプレーを選択してしまう(そしてうまくいかない)
練習が試合に生きないのは悔しいしもったいないと思ってました。そして解決の方向性として、長らく上記のAを目指していました。
しかし近ごろ思うのは、Bを目指すべきなのでは、と。理由としては、「自分がなぜそのスポーツをするのか」を考えたときに、「冷静でない精神状態に入り込む」というのは一つの楽しみであり、それがストレス解消にもつながる、というのがあると思うのです。Aはその楽しみを捨てる方向ことになる、だから無意識のうちに拒否反応が働いてうまくいかないのでは。

で、Bを将棋にも当てはめてみます。「冷静でない精神状態」の渦中でも「形勢判断の要素の比率を変える考え方」を実践できるようにする。
ここで登場するのが、スポーツ心理の本に載っている「イメージトレーニング」方法はだいぶ前に読んだ本なのであいまいですが、感想戦で手を振り返る際や、定跡を記憶する際に、局面だけでなく、精神状態もなるべく細かく思い出し、再現する。
そしてその状態でも新しい考え方が出せた、多種の手を検討できた、とイメージする。
中盤の難しい場面での精神状態は、つい先日久しぶりに指した24を思い出すと、胸のあたりがしめつけられる感覚になり、手も震え出さんばかり。そんな状態でもこんな手とこんな手を候補に上げ、それぞれ高速で読んだ!そんな自分をイメージする。
人前ではなかなか自分の世界にひたるのは難しいので、ネット将棋、もしくはスマホアプリとの対局後に一人感想戦でやることにします。一定期間続けてみて、まずは対局中に新しい考え方が出せること、そして何らかの棋力向上につながればいいです。
あと、イメージトレーニングのやり方の最新知識を、最近出た本などで得ようと思います。

当ブログにおける2017年の目標

近ごろ熱意と忙しさのバランスがまずまず取れており、
曲がりなりにも既に3記事をエントリーできたので、今年の目標を定めました。

「年間エントリー数を過去最高にする」

これまでのエントリー数が今から8年前、2009年の「34」なのでそれを超えること。
他のブログ主に比べればささやかな量ではあります。
一応「なるべく検索に引っかかった時に有益な情報に絞る」がこのブログのテーマではありますが、
備忘録であるコンピュータ関連についてはその方針を継続しつつ、
「雑記」についてはあまり気にせずいきます。
つぶやき程度はなるべくツイッターで済ませることで、短文でエントリー数を稼ぐのはなしにします。