Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

1分間プログラミング

今すぐ書ける 1分間プログラミング
『1分間プログラミング』は、初心者未満の人を対象とした書籍だ。書籍冒頭の説明から察するに、特に初めてプログラミングを学ぼうとしたものの、諦めた人を意識しているように感じた。

おそらく多くの人は、プログラムを学び始めるに際し、漠とした成果物として、何らかのwebサービスや、日常的に利用しているソフトウェアのようなものを想定しているはずだ。現実を知る者からすれば、それはプログラミング未経験者が直近の目標とするには、遥かにスタート・ラインからかけ離れたターゲット、と理解できるのだが、初めてプログラミングを経験した初学者からすると、学習初っ端の無味乾燥、地味さ加減や、自身の理解の及ばなさ、ターゲットと現実との乖離に幻滅し、意欲を減退させられるのだろう。そして挫折する、諦めるのが典型的なbad patternだ。

この書籍では、後述するライブラリを用いて、この無味乾燥、地味さ加減を解消しようとしている。端的に言えば、ライブラリのメソッドを呼び出しすることで、初学者ではとても実現できないことを肩代わりし、1行で複雑なことを実現させ、モチベーションを維持させようとする試みだ。

  • 作業環境
  • MagicWandと学習スコープ
  • 本質的に求められるのはメンタル面での支援ではないか?
  • 自炊プログラミング
  • 参照
続きを読む

PowerShellからDLL(ライブラリ)を呼び出す-Add-TypeとGet-Member MagicWandWin.dllの場合

MagicWandWinというライブラリの存在を知った。.Net frameworkを利用したライブラリで、NuGetからダウンロードすることができる(リンクなどは投稿末尾参照)。

MagicWandWinには、書籍『1分間プログラミング』*1の話題に必要な機能を提供するメソッドが提供されている。例えば、

Speak(String text, String locale) 指定されたロケールの発音で、textを音声出力する。
GetHTML(String url) 指定されたURLのHTMLを出力する。
GetWikipedia(String text) 指定された文字列でWikipediaを検索し、結果を出力する。

...などなど。

これらは『1分間プログラミング』を通じて活用するのだが、メソッドの動作を確認するためだけに、コーディングとビルドを繰り返すのは効率が悪い。それはMagicWandWinに限ったことではない。必要な機能を有するライブラリが存在し、その機能を利用したいのであれば、直接スクリプトから呼び出しできればよいのだ。

PowerShellならば、それができる。特に.Net frameworkで作成されたライブラリ(DLL)であれば、話は早い。コマンド”Add-Type”を使えばよい。

  • Add-Type
    • 標準ライブラリの場合
    • その他のライブラリの場合
  • Get-Member-ライブラリの詳細を調べる
  • 参照
続きを読む

未知のDLL(ライブラリ)の調べ方-IL DASMあるいはコマンド”ildasm” MagicWandWin.dllの場合


MagicWandWinというライブラリの存在を知った。.Net frameworkを利用したライブラリで、NuGetからダウンロードすることができる(リンクなどは投稿末尾参照)。

書籍『1分間プログラミング』のためのライブラリで、その他の目的に利用するようなものではない。そのためかGitHubなどでソースコードは公開されておらず、提供するプロパティ、メソッドをまとめたリファレンスも存在しない。内部処理に関するロジックが、『1分間プログラミング』にて説明される以外、何も公開情報はない。
1分間プログラミング - Technically Impossible

そもそも学習支援用、より厳密に言えば、"Hello World"や変数の学習に伴う無味乾燥、地味さ加減という、プログラム以前の問題で挫折してしまうほどの学習者の興味を引き付ける、その仕掛けのために用いられるライブラリなのだ。だから、書籍で紹介される記述方法以外の用途で使わせるつもりはないのだろう。

Intellisenseで表示されるメソッド情報(冒頭画像)を参照し、試行錯誤しても良いのだが、何とかしてリファレンスに代わるものを参照できないものだろうか。それは可能だ。

.Net Frameworkライブラリ IL DASM (Intermediate Language Disassembler)
コマンド”ildasm”
PowerShell
コマンド”Add-Type”
コマンド”Get-Member”
.Net Framework以外
Win32、COMなどのライブラリ
コマンド”dumpbin”

”ildasm”、”dumpbin”は、どちらもWindows SDKに含まれており、使い方も、ほとんど変わらない。この投稿では”ildasm”を取り上げる。
”dumpbin”と、PowerShellについては、余談にて、少し触れることにする。

  • 前提ーWindows SDKの導入
  • IL DASM - ildasm
  • 余談-dumpbin
  • 余談-PowerShellの場合
  • 余談-『1分間プログラミング』
  • 参照
続きを読む