PSU イルミナスの野望の準備

密林ことAmazonがぱっと探したところ一番安そうだったので、予約。またストーリーモードを終わらせるのに1年かかるだろうな^^;

で、現行版のPSULink一周年サンクスフェスタLink と銘打って、ファミ通CUP以上の利益大量ばら撒き中。報酬金額もさることながら、経験値も恐ろしい。現在上限Lvが100において、Lv90台のキャラが4〜5周でレベルアップするってさ(゜゜;) しかもこんなのが3週間も続くって、いくら新製品「イルミナスの野望」へユーザーを誘導するためとはいえねぇ。まさか自キャラがこんなに早くLv100目前なるとは思わなかった。

— posted by mu at 07:07 pm   commentComment [0]  pingTrackBack [0]

PowerShell、どうも思っていたのと違う・・・

先日Link の続き。

流れは以下のようになるはず
  1. RunspaceConfigurationインスタンスに関数を登録
  2. そのインスタンスを引数にRunspaceFactory.CreateRunspace()でRunspaceインスタンスを生成
  3. Runspace.Open()
  4. Runspace.CreatePipeline()で関数を呼ぶ
  5. このPipelineインスタンスにCommands.Add()メソッドでコマンドを入れる
  6. PipelineインスタンスのInvoke()メソッドを呼んで実行
  7. RunspaceインスタンスのClosePipeline()を呼んで終了
が、動かない^^;

まずRunspaceConfigurationインスタンスに関数を登録する方法が不明。とりあえずこれは棚上げにして、引数なしでRunspaces.RunspaceConfiguration.Create()を呼び、インスタンスを生成。

次にPipeline.Commands.Add()メソッドは、cmdletまたはcmdletをパイプで繋いだものしか受け付けてくれないこと。つまりPowerShell上で一行づつ入力する形式そのまんまですね。といってもPowerShellで関数定義するように

function add([double]$a,[double]$b){$a+$b}

なんて入れても、次のPipeline.Invoke()の時点でエラーとなり、目論見が外れる。

となると関数はPipelineを作成する前に定義されてなければいけなくなる。それができるのは棚上げにしたRunspaceConfigurationインスタンス。このインスタンスを作成するときに.psc1ファイルを指定可能。これ拡張子が似てますがPowerShellのスクリプトファイルである.ps1とは別物で、試しに上の関数addを定義するだけの.ps1ファイルを指定したら、XML形式じゃないと怒られた。

.psc1ファイルを作成するひとつの方法は、PowerShellでexport-consoleを実行すること。試しに関数addを定義後、

export-console -path .¥test

と打ち込むとこんなファイルができた。
<?xml version="1.0" encoding="utf-8"?>
<PSConsoleFile ConsoleSchemaVersion="1.0">
  <PSVersion>1.0</PSVersion>
  <PSSnapIns />
</PSConsoleFile>
うん、全く関数addの痕跡なしw このファイルを見る限り、どうやらSnapInのことしか記録してないっぽいです。

SnapInとは特殊な形式のDLLってことで正しいのでしょうか? Visual Studioでプロジェクト作って、PSSnapInを継承したクラスを作ってビルド、これでできたクラスはインストールすればcmdletとして扱われるみたいで、そうすればPipeline.Invoke()で実行できることでしょう。

しかし先日Link にも書いたとおり、やりたいのは頻繁に変更される処理だけスクリプト化して柔軟性を増やすことなので、これでは本末転倒。今までスクリプト関数として処理していたものを、cmdletのパイプ繋ぎで実現(必要ならcmdletを作る)できるように考え方を変えないといけないのでしょうね。これ以上調べている時間もなさそうなので、今回もWindows Scripting Controlを使うことになりそうです。

[参考]コマンドレットの作成方法 (C#と諸々)Link

[2009/3/2 追記] つづきLink

— posted by mu at 05:58 pm   commentComment [0]  pingTrackBack [0]

PowerShell、お前もかい?

以前作ったプログラムで、GUIが必要なので基本はVB6で作り、頻繁に変更が発生しそうな計算だけMSScriptControl.ScriptControlクラスを使った物を作りました。あらかじめAddCodeメソッドで外部のテキストファイルに書かれているVBScriptの関数を登録、計算時にRunメソッドで関数を呼ぶというものです。計算部分だけがテキストファイルで分離されているので、そこの差し替えだけでその場で対応が取れたりと柔軟に機能。自分としては結構うまくいった解決でした。

今回基本部分がVB.NETに変わったので、.NET Frameworkを利用できるPowerShellを利用しようかと、昨日から下調べを始めました。

VB.NETからはSystem.Management.Automation空間のクラスを使うらしい。事前にPowerShellをインストールし、Vista対応のWindows SDKをインストールするか、C#と諸々Link を参考にSystem.Management.Automation.dllを入手して、プロジェクトに参照登録する必要があります。

以下、こうすれば動くのではないかという想像。まだ試してません。
  1. RunspaceConfigurationインスタンスに関数を登録
  2. そのインスタンスを引数にRunspaceFactory.CreateRunspaceでRunspaceインスタンスを生成
  3. Runspace.Open
  4. Runspace.CreatePipelineで関数を呼ぶ
  5. Runspace.ClosePipeline

さてPowerShellの使い方を覚えようと、XMLファイルを読むのを試しに作ってみる。以下のVB.NETのコードは動くことを確認。

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim xmldoc As New System.Xml.XmlDocument
        xmldoc.Load("sample.xml")
        Dim rootelement As System.Xml.XmlElement = xmldoc.DocumentElement
        TextBox1.Text = rootelement.Name
    End Sub
End Class
んで、これと同じことをPowerShellでやろうとコマンドを打ち込む。
PS C:¥XML> $xmldoc = new-object System.Xml.XmlDocument
PS C:¥XML> $xmldoc.Load("sample.xml")
PS C:¥XML> $rootelement = $xmldoc.DocumentElement
PS C:¥XML> $rootelement.Name
PS C:¥XML> $rootelement.GetType()
null 値の式ではメソッドを呼び出せません。
発生場所 行:1 文字:21
+ $rootelement.GetName( <<<< )

あら? $rootelement.Nameは何も表示しないし、GetType()を呼ぶと$rootelementはnullだという。う〜ん使い方が悪いのかXMLが読めていないのか、よくわからない。

以前JMP Version4Link をCOM Automationで使おうとしたとき、あるメソッドがVB6からは難なくアクセスできるのに、VBScriptからだとエラーになるという問題がありました(今は修正されていますし、該当バージョンでも回避法があります)。これはVB6とVBScriptが似ていても中身は別物ということに起因するらしいのですが、なんとなくそのことが頭を離れない。PowerShellもそんなことやってたりするの?

[参考]

[2007/9/6 追記] どうもPowerShellからアクセスできるメソッドに制限があるらしい・・・

— posted by mu at 05:29 pm   commentComment [0]  pingTrackBack [0]

休暇を取ってPSO ^^;

blog20070903PSODropRateX5

しています。ドロップ率5倍期間が発表されてから決めてました。去年の10倍の時も取ったのですが、なんか今回後ろめたいというか、自分自身何やってんだかという気持ちが朝からあったのですが、

このテロップ見て吹っ切れました \(^o^)/

同じこと考える人はいるもんだな。

[2007/9/4 追記] 所属しているチームマスターも有給休暇取ってたw 共に結果は散々(つдT)

— posted by mu at 01:15 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0132 sec.
prev
2007.9
next
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30