雑記+備忘録

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

それが大事

24で6連敗しました。Rが一気に100近く低下。
直後は悔しさに唸りますが、一晩寝るといくぶん冷静にとらえることができます。
レーティングのシステム上1局ごとに連敗が止まる確率は上がる(はず)ですし、
そもそも落ち込むほど学習に時間をかけられていないのが現状なので、まあやむなし。

中盤に力を入れすぎて、何か序盤と終盤のアラが目立ってきた感じです。
トータルに、棋力を上げていくような学習の工夫が要りそう。
以下を並行して毎日少しずつ進める/復習することにしました。
・局面、戦形ごとの定跡思い出し/学習(※)
速効! 振り飛車の絶対手筋105
・寄せが見える本

寄せが見える本〈応用編〉

寄せが見える本〈応用編〉


・必修! 穴熊戦の絶対手筋105
必修! 穴熊戦の絶対手筋105 (マイナビ将棋BOOKS)

必修! 穴熊戦の絶対手筋105 (マイナビ将棋BOOKS)


詰将棋


囲い崩しや次の一手も入れたいですが、
あまり欲張りすぎても破綻するのでまずは上記で。

(自分に)負けないこと投げ出さないこと逃げ出さないこと信じぬくこと。
思うように成果が出ないときこそ、それが一番大事と思います。
この曲は自分が高校生のときに・・・(以下年寄りの思い出話なので割愛)


※:以下を参考にします(ありがとうございます)。
自分の中では将棋好きブログの “王道” 志士さんの勉強法です。
http://blog.livedoor.jp/shishi016/archives/51663166.html

ぼちぼちやってます

24は週に1~2局やっていますが、勝ったり負けたり。
低中級ボーダーラインあたりで安定してます。(タブ切り替えが面倒)
課題だった中盤は見えるようになってきたものの、
負けるときは序盤で集中力を欠いて変なミスをしたり、
(例:「よっしゃ左穴熊や!」→なぜか6八銀を上がる)
終盤でもたついて逆転くらったりです。
そのうちそちらに気を取られると中盤で新しい考え方を忘れて読めなくなったり。


とにかくまずは序盤で変なミスをしないこと。
序盤はまた一度整理して、かつ整理したものの見直し回数を増やして
頭が働いていなくても反射的に定跡手が指せるようにしたいところです。
後は「振り飛車の絶対手筋」、他にいろいろあることもあり進みが遅め。


そして、ぺんぎんさんの記事(指す将順位戦 - ぺんぎん草
)を読んで、「第2期指す将順位戦」(http://twishogi.web.fc2.com/sasu_sho/entry.html)にエントリーしました。
今から楽しみです。
しかしエントリーの人数が多いですね。
こういうリアルでもネットサークルでもない、
しかし「仲良くやる」がベースなゆるいつながりの大会は需要あるんだなあ。
確かにリアルは日が限られる上に1日拘束され、
ネットサークルはそれに比べると自由度は高いですが、
それでもまだつながりやしがらみ、
「レベルが離れているとつまらない(もしくは申し訳ない)」といった心理的なもので
気軽さが足りないのかもしれません。

よく使うMarkDown記法をメモ

・書く時の注意:改行をしてくれないので改行したい場所に「<BR>」を入れる
 (もしくは行末にスペース×2)


ソースコード記載:上下にバッククォート3連を記載
```
(内容)
```

 

・ソースのタイトル(ファイル名など):バッククォートで前後を挟む
`(タイトル)`

 

・箇条書き:「*」「+」「-」のいずれか+スペースを入れる
 (上下に空行がないと正しく表示されないとの情報あり)

 

・URLリンク:[<URL>:title=リンクテキスト]

 

・本を表紙画像付きでリンク(small):ISBN:<ISBN番号>:detail:small

 

PowerShellでADのグループメンバーを追加、削除

(2017/3/15追記)もっとシンプルにできました。
 コメントいただいた「素敵なおひげ」さんありがとうございました。

$user = Get-ADUser -Filter {(Name -like "*山田*") -And (Name -like "*太郎*")}

Remove-ADGroupMember "千葉支店_課長" -Members $user.DistinguishedName -Confirm:$false

Add-ADGroupMember "千葉支店_部長" -Members $user.DistinguishedName -Confirm:$false

最初うまくいかなかったのは「-Members」の引数に「Select-Object」で抽出したオブジェクトをもってきていたのが良くなくて、
「素敵なおひげ」さんのアドバイス通り、Get-ADUserで得たオブジェクトの「DistinguishedName」プロパティをもってきたらうまくいきました。
(追記ここまで)

基本的には「Add-ADGroupMember」「Remove-ADGroupMember」を使えばよいのですが、
メンバーの指定方法で苦戦したのでメモ。

これも要点だけ先に記載すると「-Members」の引数としては以下の4種類が指定可能とのことです。
MicrosoftTechNetコマンドリファレンスによる)
・識別名
  例:CN=山田 太郎,OU=東京本社,OU=スーパーさ部,DC=test,DC=local
・GUID(ObjectGUID)
・セキュリティ識別子(するObjectSID)
・セキュリティアカウントマネージャ(SAM)アカウント名(sAMAccountName)

で、SamAccountNameを指定してコマンドを実行すると、
ドメイン下にユーザーが存在しない」といった意味のメッセージが表示されます。

間にOUが挟まっているせいか、と識別名で指定することにします。
識別名を呼び出すために、

Get-ADUser -Filter {(Name -like "*山田*") -And (Name -like "*太郎*")} | Select DistinguishedName

フィルターの条件は「Name -eq “山田 太郎"」でも良かったのですが、
今回のシステムでユーザーを作る際に姓と名の間のスペースが半角か全角か統一されていない可能性があったので、
少しひねってみました。(こういうAnd条件が使えるということも見たかった)
→ただこれだと「小山田 太郎」さんとかいたらひっかかるか。要再考。
で、普通にこれを実行すると、「DistinguishName」が「オブジェクトとして」出力されるので、
「-Members」の引数に指定すると「型が変換できません」とエラーメッセージが表示されます。

で、文字列変換するために、

Get-ADUser -Filter {(Name -like "*山田*") -And (Name -like "*太郎*")} | Select DistinguishedName | Out-String

今度は「ゼロ文字列行」「DistinguishedName」「—————–」「CN=~」の4行の文字列として認識され、
そんなメンバーいないとエラーメッセージ。

抽出した値だけを文字列にしたいんだ。
探すと、以下が使えるようです。
(参考(ありがとうございます):http://stknohg.hatenablog.jp/entry/2015/08/23/235304

Get-ADUser -Filter {(Name -like "*山田*") -And (Name -like "*太郎*")} | Select DistinguishedName | Out-String -Stream

画面上の出力は先ほどと同じですが、表示される4行が文字列の配列の形になっているので、
変数に格納した際に以下のように使えます。

$a = Get-ADUser -Filter {(Name -like "*山田*") -And (Name -like "*太郎*")} | Select DistinguishedName | Out-String -Stream

Remove-ADGroupMember "千葉支店_課長" -Members $a[3] -Confirm:$false

Add-ADGroupMember "千葉支店_部長" -Members $a[3] -Confirm:$false

「-Confirm:$false」は「-Confirm $false」ではないのでこれも注意するポイントです。

負荷テスト用ツール(メモリ)

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

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

○ TestLimit
上記サイトからダウンロードできます。本家Sysinternalsのサイトでは探し方が悪いのか見つけられず。
ダウンロード後、コマンドプロンプトから必要なオプションを指定してexeファイルを実行ます。
実行するファイルは32ビット環境では「Testlimit.exe」、64ビット環境では「Testlimit64.exe」です。
例えば以下では500MBの負荷をかけ続けます。
Testlimit64.exe -d -c 500
オプションの「-d」よりも後ろにMB単位で使いたいメモリのサイズを指定します。
「-c」についてはヘルプの説明では意味が分かりませんでしたが、
「-c」なしで実行してみたところ一定時間ごとに「使うメモリが500MBずつ増加」していき、マシンをフリーズさせたので、
「-c」は「占有するメモリサイズを指定した値に保つ」意味と思われます。

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

CPUツールと異なり、ほとんどゆれ幅がありません。

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

負荷の終了は、コマンドプロンプトで「Ctrl + c」でプログラムの実行を中断させます。

負荷テスト用ツール(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 "山下"
山下たろー