2009年11月30日月曜日

SQL-Server 2008 Expressの再帰クエリーによる、電子掲示板データの一発作成

先日の記事で、SQL-Server 2008 Expressの再帰クエリーについて書かせていただきましたが、友達から「電子掲示板作成のサンプル載せて」というリクエストがありました。
そこで、今回は、先日の記事で作ったサンプルをベースにして、「再帰クエリーによる、電子掲示板(BBS)データ作成」をやらせていただきたいと思います。

電子掲示板データを格納するテーブルは、とてもシンプルなものです。
フィールドはたったの三つだけ。発言ID、レス先のID、発言内容だけです。

SQL-Server 2008 Expressの再帰クエリーを使えば、複雑なプログラムを組む事をせずに、このシンプルな情報から、発言のつながりや階層のレベル、一番最初の発言をグループ主にしたソートなど、必要な内容を迅速に得る事が出来ます。いや、迅速というよりもクエリーの一文で書けてしまうのが2008の威力。スゴイところ。

今回作ってみたサンプルの再帰クエリーの構造は、先日の部品階層データ取得クエリーを踏襲しております。
ただ、電子掲示板のデータはソートも重要なので、最上位の発言をグループ主として管理し、最後にこれを最優先のソート条件にしています。

先日の記事の繰り返しになりますが、再帰クエリーは、単独の機能ではなくて、あくまでも共通テーブル式CTEの応用なのがポイントであります。
ですから、CTEを使っていれば自然と再帰クエリーが分かってくるのかなぁと思います。

CTEは、再帰ばかりでなく、普通にビューや一時テーブルの代わりとしても重宝します。
文の外では無効になってしまうのが辛いところですが、パフォーマンスが良いみたいなので、SQL-Server 2008では積極的に使いたいなぁと思います。

それにつけても、モバイルパソコンって本当に良いもんですね。
性能の許す限り何でも出来てしまうその自由っぷりが良い。
使うたびに何回も思ってしまうんですが、Aspire 1410買って心の底から良かったなぁーって思います。

パソコンの常として、Aspire 1410も、すぐにさらに高性能な後継機が出てくるはず。
まぁAspire 1410がかすむほどの大幅進化なら、一年か二年くらいは時間がかかるでしょうが、その時はまた買いたいなぁと思えますね。

(追記)Aspire 1410の良さですが、何気にLEDバックライト液晶の良さも大きいです。まっ昼間の屋外とかの悪条件、PSPでは外光に負けて全く何も見えなくなる条件であっても、Aspire 1410なら平気だったりします。起動直後でも、色味が安定してたりしますし、LEDバックライトいいなぁと。この価格でLEDバックライト搭載とかって、エイサーどれだけ企業努力してるんだと頭が下がりますね・・・。

2009年11月29日日曜日

EF 100mm F2.8L MACRO IS USMの持ち味にあらためて感激



レンズのEF 100mm F2.8L MACRO IS USMですけれど、撮影のたびに、その描き出す立体感、味の素晴らしさには感激させられます。
こういうのは、ウデがどうとかセンサーの画質がどうとか、そういう問題を超えた話になりますし。

ちょっと狛犬を撮影してみたのですが、なんというか、うまく表現できなくてもどかしいのですが、周囲に流れている空気のふわっとした匂いまで感じてしまいます。

もしかして、こりゃ大変なレンズを手にしてしまったのかなぁと。

デジタル時代になってしまうと、レンズの評価軸って、シャープであれば勝ちみたいなところがあるんですが、キヤノンのEFレンズは、あんまりシャープさにはこだわってない気がする。
収差とかもガチガチに補正するのはやめて、レンズにイキイキとした個性を持たせようとしてる気がするんですよね。

レンズの良いところは、優劣では語れないところ。
そう、好き嫌いで選べる点だと思います。
ある意味クルマとか服とかと一緒なんですよね。

欠点と言えば、このレンズの悪い点ではないですが、やはり、私にとっては非常に高価で持ち出しが怖いところですね。落としたりぶつけたりしたらどうしようって考えてしまう。
いやー、これはあるんですよね。
撮影に夢中になると機材が見えなくなるという、ある意味カメラ特有の「現象」って、変な言い方ですけどあるんですよね。
気が付いたらコンクリートや岩石のカドで、カメラやレンズをガリガリー!!とかある・・・
これは、今日にもやってしまうかも。書いていて本気で怖い。

2009年11月27日金曜日

SQL-Server 2008 Expressは、再帰クエリーが書けて感動(その2)




今回は、前回の記事に引き続いて、SQL-Server 2008 Expressの再帰クエリーについて書かせていただきます。

再帰クエリーは非常に便利。いや、それどころか、無いと実現が困難な処理も多々あります。

特に、再帰クエリーじゃないと書くのが困難な処理と言えば、やはりデータの階層構造を求める処理ではないでしょうか。

たとえば、製品がどんな部品で構成されているかの階層情報や、身近な例で言えば、電子掲示板の書き込みのレスのつながりとかでしょうね。

再帰が活躍するポイントは、これらの、何階層つながっているのか分からない情報に対処できるという点です。

今回私が作ってみたサンプルですが、自分のID(MY_ID)、親のID(PARENT_ID)を持ったテーブルから階層情報を生成します。

自分のIDは、親のIDとつながり、その親はそのまた親のIDとつながり・・・を情報が尽きるまで繰り返すわけです。

最上位の親は、親のIDに「何もない」事を明示する0をセットしています。これで最上位である事を識別可能にしてあります。


サンプルでは、次のようなテキストで階層情報を表現します。
親のID>次のID>自分のID

共通テーブル式CTEの内部では、自分自身(CTE)を呼び出しますが、その際にデータテーブルの親IDと、CTEの自分のIDをINNER JOIN句で紐付けて次の情報を手繰り寄せているのがポイントです。

もしも、繰り返しの回数が固定されているのであれば、無理やりにでもプログラムを組む事は可能なのですが、いかんせん、何階層か分からないという状態では、どうしても再帰処理が必要です。
私が仕事で使っているSQL-Server 2000は、企業向けの最上位エディションであろうとも、再帰クエリーは存在しないので、フリーでありながらSQL-Server 2008 Expressには深く感動させられます。

しかも、SQL-Server 2008 Expressですが、今や、安くて良いモバイルノート「Aspire 1410」と64bitのWindows7上で好きに使える時代なんですよね。
目頭が熱くなりますね・・・。いい時代だよぉ・・・。

SQL-Server 2008 Expressは、再帰クエリーが書けて感動(その1)

今回と、次回の記事は、二回に分けて、マイクロソフトのフリーのデータベース「SQL-Server 2008 Express」の「再帰クエリー」について書かせていただきます。

再帰クエリーは、私が普段仕事で使っているバリバリの企業向けエディションSQL-Server 2000では書けないので、2008 Expressがむちゃくちゃうらやましい。

再帰は、その名前の通り、自分で自分を呼び出す処理です。
たとえばなのですが、一年分のカレンダー情報なんかは、再帰クエリーを使うとすぐに作る事が出来ます
ただ、再帰クエリーを書くには、SQL-Server 2008 の「共通テーブル式(CTE)」という手法を知っておかないとならないので、2000から来た場合は、ワンクッションおいて勉強しないといけないかも。

共通テーブル式CTEは、文の中だけ限定で使えるビューのようなもので、CTEの中では自分自身(CTE)をさらに呼び出せるという特性があり、再帰クエリーはこのCTEの特性を応用することで書けるようになっています。

実際にカレンダー情報を得るクエリーを作ってみました。再帰クエリーは、おおまかに言って三つの部位から成り立っています。まず、CTEの外側にあって、CTEを最初に呼び出す式。
CTEの内部には、処理の起点となるアンカー部。アンカー以降の繰り返し部分となる再帰部
この動きを覚えるには、やはり自分でサンプルを何回も書いてみるのが近道でしょうね。

カレンダー処理ですが、まずはアンカー部にカレンダーの起点を指定します。
再帰部は、日付に1日プラスするだけ。
この再帰部を呼び出し続ける事によって果てしなくカレンダー情報を作る事が出来るわけです。
ただし、このままでは無限に求めてしまうので、CTEの外側の式に「TOP 365」を指定することによって一年分(365日分)で終わらせているわけです。

ちなみに、忘れちゃいけないのですが、再帰クエリーには強制打ち切り機能があるのです。
再帰クエリーは、OPTION(MAXRECURSION 再帰打ち切り回数[0だと無限])というオプションを指定しない限り、強制的に100回で打ち切りになります。
この場合、100回分だけ有効ってわけではなくて、丸ごとエラーとして扱われるのがポイントです。

仕事が大変でも、なんとかゲーム

うう・・・今週は、仕事がえらく大変でした・・・。
いやー、午後二時を回ってから「今日中に必要なので、何とかプログラム作って下さい」ってパターンは心身ともに追い込まれるので、手加減して欲しい。しかも今週は似たようなパターンが連発。
辛い事には、こういう場合であっても依頼者は「バグは発生しないのだ」という前提でいたりするのです。
何とか難題をクリアしたものの、頭とキーボードを打つ指先が茹で上がる毎日でした。

それはともかく、気分転換にPSストアでゲーム買ってみました。
友達が「傑作だ」と昔から大プッシュしていて、このほどPSP化(ゲームアーカイブス)された、「ときめきメモリアル2」です。高校生活楽しみゲームとして相当に優れものらしい。

ビッグタイトルですが、良心価格600円。アペンドディスクも、全てセットで600円。価格はあいかわらず素晴らしすぎる。ありがとうソニー。ありがとうアーカイブス賛同メーカー!!
・・・というのがいつものパターンなんですが・・・今回ばかりは、壮絶なオチがありました。
なんと、容量がとんでもないデカさ。
本体とアペンドディスクを合わせると、なんと、なんと、3035メガバイト。ファミコンで言うところの・・・
2万4280メガビットに達しているのです。

というか、買ってから気がついた私。

買ったはいいけれど、PSPのメモリカードに空きが作れなくてインストールできず。
ビデオとか音楽もあるし、1コンテンツが3ギガバイトとかになると、メモリカードの容量ではいきなり心もとなくなりますねー・・・。

2009年11月23日月曜日

仙台の紅葉を、EF 100mm F2.8L MACRO IS USMと、EF 20mm F2.8 USMレンズで撮る









仙台の紅葉です。
カメラはEOS KISS X2。

使用したレンズは、ロングショットがEF 20mm F2.8 USMです。

あとはEF 100mm F2.8L MACRO IS USMでの撮影となりました。

かなり強風が吹いている日の撮影でしたので、何枚かは被写体を思いっきりブラして表現してみました

全てマニュアルモードの撮影です。

絞りを極端に絞り込んでから、シャッター速度を極端にスローにし、被写体に積極的にブレを与えると、まるで絵画っぽい感じの表現が出来るのです

今回も、このやり方で撮影した写真が何枚かあります。

極端な写真は好みが割れるでしょうが、ご容赦下さいませ。

マニュアルモードでの撮影は、一枚の写真を撮るのに時間をかけなくてはならないので、おっつけ写真の枚数が増えず、そこそこの容量(2GBか4GB)のSDカードで間に合うという魅力もあります。

これからのゲームとゲーム機を考える

最近、ノートパソコンのAspire 1410と、Windows7に弩ハマリしている私ですが、ゲーム機への期待も高まっています。今回の記事は、現在のゲーム機の後継機について色々考えてみたいなぁと思います。

■ニンテンドウDS後継機について■

任天堂系のハードは、携帯機や大型テレビゲーム機機のどちらも後継機への安心感が最も大きいと言えるでしょうね。そもそも、任天堂は現世代において性能を低く抑えている事から、後継機で進化させれば良い部分が非常に明快です。
ネット上の情報によれば、DS後継機は、ハイビジョン映像の再生などにも対応するようで、PSPのように「ゲーム以外にも長けている」というハードに進化するならば、私もかなり興味があります。
ただ、個人的には、予算や時間の配分の問題から、あまり多数のハードに注意力が分散するのは避けたいので、PSPの動向次第という条件付ではあります。

■PS3やXbox360の現在について考える■

残念ながら、あくまでも個人的にですけれども、PS3と始めとして現行世代の大型テレビゲーム機には大きな失望感が芽生えてしまい、それを払拭したいのですが、どうやら難しそうです。

PS3は、OSがとてもとても低機能であるため、ハードの特性から遊ぶ場所が拘束されるのはしょうがないにしても(言ったらデスクトップパソコンもそうですし)、ゲームの一時中断さえも許さないシステムには、非情な拘束性を感じ、耐えられません

性能面でも、常に進化し続けるデスクトップパソコンに及ばないのはしょうがないとしても、フルハイビジョンにはまだまだ対応し切れていないのが分かったので、今世代は、まだまだ過渡的な存在という印象が強くなってしまいました。

PS3に関しては、当初は何とか割り切れるだろうと思っていた新型タイプにおけるLinuxインストール打ち切りですが、時間が経過するにつれて大きなマイナスに感じられます。過去のモデルを中古で買えばいいじゃないかという問題ではなく、これから市場を広げていく新型がLinuxマシンにならないということは、すなわち、PS3 Linuxの発展は消滅したという事で、この事実が重たく感じられるのです。

Linuxと言っても、元々PS3のハードウェアをフル活用できない制限があり、あくまでもマニアックな機能の一つとして終わっていた感もありますが、かすかにでも希望的なものがあったのを粉砕したのは個人的には辛いです。でも、次世代のPS4には期待しています。

PS4は、まだ話が早過ぎるでしょうけれど、かんばって欲しい。

■まさかの展開■

Linuxを捨てたPS3にひきかえ、マイクロソフトのXbox360の方は、今までノーマークだったのでよく分かってないのですが、どうやらXNA Game Studioによって、販売や公開などは別としても、個人がC#言語を使ってパソコンでソフト開発可能のようでって・・・・・・・・・・・・・・・・・・?! 

■個人的な大本命PSP2について考える■

個人的な大本命は、もちろん好きなPSPの直系の後継機たるPSP2です。
性能的には現行のPSPのプラスアルファで構わないと思っていましたが、なにしろ任天堂のDS後継機が性能で相当に頑張るみたいな情報が出てきたので、ソニーもうかうかできない感じ。

ただ、あと一年や二年で、PSPや次世代DSを劇的に引き離した性能のまま、サイズやバッテリ持続時間も満足できるテクノロジーが存在するのかどうか、という不安はあります。
それに、あまりハード開発で消耗すると、初期のPSPやPS3のように、ソニーがソフト開発に力を注げない燃え尽き症候群化が心配。

とりあえず、性能面での要求は尽きませんが、ゲームスリープが柔軟でキチンとしていれば、買いたい気持ちが倍加です。
母艦は現行PSPのように、パソコンで良いです。出来れば、Windows Mobileレベルまでは望みませんが、本体のみでファイルのディレクトリ移動くらいは可能ならばより良いですね。

色々書きましたが、ゲーム機がんばれぇー。

2009年11月22日日曜日

SQL-Server 2008 Expressでは、待望のマージ(MERGE)文が書ける!

今回の記事は、Aspire 1410のWindows7(64bit)版で稼動するフリーのデータベース「SQL-Server 2008 Express(64bit版)」について書かせて頂きたいと思います。

マイクロソフトのSQL-Server 2008 Expressは、そのGUI管理ツールであるManagement Studio 2008と共に、「えっ、こんなスゴイのがフリーでいいの?!」と、本気でマイクロソフトが心配になるほどの驚異的な使いやすさと高機能を誇っているすさまじいソフトです。

なんたって、フリーとはいえ、その基本として備わっている機能は、企業が基幹システムに採用する製品版と同等

ただし、製品版と比較して、使用できるメモリ量とCPU数などに上限が設けられており、大規模なデータを扱いきれなくする事によって、企業がフリーで済ませられないような制約はかけてありますそりゃ当たり前ですね。

SQL-Server 2008は、特にSQL-Server 2000からは、劇的と言えるほどの進化をとげております。
進化点はさまざまありますが、二つのテーブルを一つにマージするMERGE文がようやく書けるようになっています。今回の記事は、特にこの部分フォーカスしております。

MERGE文が無いと結構大変。テーブル1とテーブル2を比較し、キーが重複すれば更新、しなければ挿入という文をバラバラに書かねばならないし、それぞれ何件処理したかの管理も考えないといけません。しかし、MERGE文なら一発
うわぁ・・・これは良いわー・・・。

というわけで、MERGEのクエリーを書いてみました。
せっかくなので、使用するデータはExcelから読み込んでみました。Excelからデータを読み込む周りは、以前の記事で書かせて頂いた内容をそのまま応用いたしました。

MARGE文で二つのテーブルを一つにするだけでもありがたいですが、その更新内容を出力するOUTPUT句の存在もかなり大きいものがあります。
どの行を更新し、どの行を挿入したのか、自分で処理を作り込む必要がなく、$actionを参照しさえすれば「UPDATE」または「INSERT」というテキストでもって、システムが行った更新内容を報告してくれるんです。
これは、SQL-Server 2000なんかを使った後だとかなり感動できちゃいますね。

ちなみに、SQL-Server 2008は、ビューやSQL関数だけでなく、共通テーブル式(CTE)という書き方が使えます。共通テーブル式は、どうやらパフォーマンスも落ちないらしい
せっかくなので、CTEも無理やりに使ってみました・・・。

仙台の賀茂神社の紅葉を、EF 28mm F2.8レンズで撮る





そろそろ仙台も紅葉が終わりかけになってしまいましたが、加茂神社というところの紅葉が実に見事。
出掛けたついでに立ち寄って鳥居付近の写真を撮ってきました。

カメラはEOS KISS X2。
撮影モードは全てマニュアルモードです。

冬は日が落ちるのが早いので、四時前なのにもうすっかり夕方の光になっておりましたね。紅葉シーズンが終わったからか、参拝の方も鳥居付近には殆どおられませんでした。

レンズは、EF 28mm F2.8レンズ。

絞りは全てF/5.6に設定しての撮影です。

超強引ですが、64bit版 SQL-Server 2008にて、Excelのワークシートのデータを読み込む方法を考えました!


前回の記事では、64bit版Windows7上で稼動する64bit版データベースSQL-Server 2008 Expressにて、Excelのワークシートが読み込めない問題に悩んでいる件について書かせて頂きました。

今回の記事では、超強引なやり方で解決策を考えたので、それについて書かせて頂きます。

まず、やりたい事は、要するに64bitのSQL-Server上のデータベースに、Excelワークシートに格納されているデータを読み込んで来られれば良いわけです。ここの一点突破を図りました。

こういうやり方です。

(1)データの読み込みがAspire 1410で出来ないなら、正常に動作する自作PC上でやらせる。

(2)自作PCには、Excelワークシートを読み込むSQL-Serverプログラム(SP)を作っておく

(3)Aspire 1410から自作PCにリモート接続してそのプログラム(SP)を呼び出す

(4)Aspire 1410側からリモート接続し、自作PC側のSPを実行する。その実行結果たるExcelデータをAspire 1410側でさも自分側で実行したかのように取得する。

(5)結果オーライ

ちなみに、Aspire 1410は「64bit版Windows7と64bit版SQL-Server 2008 Express」、
自作PC は「 32bit版Windows XPと32bit版SQL-Server 2008 Express」です。

以上のように、単体で駄目だったならば、ネットワークを介して、仕事を出来るヤツに分散させてしまえという考え方です。
(64bitで'MICROSOFT.JET.OLEDB.4.0'が使えないなら、32bitで使ってしまえー。ゲットしたデータは、リモート接続で64bitが頂いちゃえば良いぞと。)

これからは、4GB以上に増加して行く利用メモリ量の問題等(32bitでは、どんなにメモリを積んでもユーザーは3GB程度しか利用できない)で、Windowsも64bitが主流になると思います。
だから、もしも64bitに問題があるとすれば、きっと近い将来修正されて、スッキリと解決されるのではないかと期待しています。
それまでは、トリッキーなこの手で行こうかなというところです。

さて、実際にやってみました。
設定をしかるべく行い、SPを作成し、Aspire 1410から自作PCにリモート接続・・・。無事にテストデータが読み込まれました。

データさえ64bit側で受け取れたら、あとはこっちのもの。
これ以降の処理は普通に出来ますし。

それにつけても、SQL-Server 2008 Expressは、Windows7に負けないくらい素晴らしい要素満載ですよねぇ・・・。
またしても色々と感動しまくり。
これがフリーソフトなのですから、世の中えらいことになってんなぁ・・・。

ちなみに、Excelデータと言いますが、Aspire 1410にはマイクロソフトのOfficeがインストールされていないので、データの作成や活用には、これまたフリーソフトのOpenOfficeを使っております。

OpenOfficeは、Excelより少し動作が重たく、企業が使うレベルのVBAの話になると弱いですけれど、立派なオフィスソフト。
Linuxでも使える(対応版が存在する)応用範囲の広さもあるし、とっても魅力的ですよ。

EF 50mm F1.4 USMの開放で撮るラーメン


昼間、親しい人にラーメン作ってもらったので、記念にEF 50mm F1.4 USMレンズの開放F/1.4で撮影してみました。

カメラはEOS KISS X2。撮影モードはマニュアルです。

EF 50mm F1.4 USMの開放は、幻想的な感じで撮れるのが魅力。

2009年11月21日土曜日

Windows7で問題発生。64bit SQL-Server 2008 Expressで、Excelワークシートが読み込めない・・・


マイクロソフトが誇るフリーのデータベースソフト「SQL-Server 2008 Express」ですが、私もいよいよその64bit版を、Windows7の64bit版の上で使用開始いたしました。

しかし、早くも一つ問題が発生してしまいました。
SQL-Server 2008 Expressのデータベースのテーブルにデータを格納する時、私は、Excelから読み込んで一気に格納するのが便利なので多用しているのですが、それが動かないのです。

SQL-Serverには、OpenRowSet()関数によって、Excelのワークシートをまるでデータベースのテーブルと同じ感覚で利用可能である、という、とんでもなく便利な機能が備わっています。

SELECT M.* FROM OpenRowSet(
'MICROSOFT.JET.OLEDB.4.0',
'Excel 8.0;DATABASE=ワークシート名;HDR=YES;IMEX=1;',
'SELECT * FROM [シート名$];') AS M;

という感じで使うのですが、Excelワークシートを読み込む時に使う「MICROSOFT.JET.OLEDB.4.0」というプロパイダがどうも64bitには対応してないみたいです。
ネットを必死に調べても、分かりませんでした。

自分の環境で言えば、自作デスクトップパソコンの32bit Windows XPと、32bit SQL-Server 2008 Expressの組み合わせの方であれば、基本の設定さえしっかりしてあげておけば、特に問題なくスルッと使えているのです。
だから、まさか使えないとは思わなくって、かなり焦ってしまいました。

やっぱり64bitだとだめなのかなぁ・・・。
仕事が夜中までかかり、遅くに帰宅してからこの件でウンウン悩んだので、気がつくと徹夜してました。
連休の初日は、こうして一日中眠たいままで、連れにあちこち付き合う羽目になっちゃいました・・・。
それはともかく、この問題どうしよう・・・。

しかし、要するに、私が何をやりたいかと言えば、Excelのワークシートを読み込んで、データベースに格納できれば良いのです。
そこを突いて考えれば、別な手段で解決できるんじゃないかと。

かなり強引で、あまり参考にならないかも知れませんが、64bit Windows7でExcelワークシートをデータベーステーブルとして読み込む方法を思いつきました

長くなって来たので、それは次回の記事で書かせていただきます。

2009年11月20日金曜日

Windows Power Shell、なんとコマンドシェルからcomオブジェクトまで使える!!


.NET FrameworkベースのWindows Power Shellですが、なんと、comオブジェクトまでインスタンス化して使う事が出来ました

たとえば、ASPやVisual Basicなどでファイル操作の超エースである「Scripting.FileSystemObject」ですが、これをそのまま使う事が出来ちゃいます!!
インスタンス化にあたって、-comスイッチを付けてあげるだけ。

[Object]$obj_fso = $(New-Object -com Scripting.FileSystemObject);
これだけで、Visual Basicでおなじみのファイルシステムオブジェクトをまんまコマンドシェルから操作しまくりです。
「Windows Power Shellにゃあちょいとなじみが薄いから、ファイルシステムオブジェクトでファイル操作したいぜ!!」という場合も安心。この選択肢の多さは魅力ですねー。
しかし、コマンドシェルからcomまで打ち込みで使えるって、応用範囲がどれだけ広がるのか想像もつかないですね。

■Aspire 1410と、Windows7は、日ごとに愛着が増して行きます■

それにしても、Aspire 1410と、WindowS7は、使うごとに毎日愛着が増して行きます。
まさかここまで良いものだとは思わなかった・・・。
Aspire 1410はカテゴリー上は「格安ノート」ですけれど、私は、もはや、少しも甘く見てません。
使いやすいしスタイリングだって立派。短期間ですっかりメインマシンの地位に昇格してます。

Windows7は、個人的には間違いなく歴代Windowsの中でダントツのダントツで最高。特に、やっぱり、Windows Power Shellの標準搭載があまりにもあまりにも大きい。
後付でダウンロードしてインストールするのと、最初からOSの機能として備わっている事は、天と地ほども違うのです。買ったその日からWindowS7に標準でプログラムが作れて、ユーザー全員の環境で間違いなく動く。普及率百パーセントっ。

なんか、初めてX68000というパソコンを買った時に近いくらいワクワクしてます。あの時は、プログラムとかOSとかに初めて触れたのですが、自分の知らない新しい世界の扉が開いた感じがして、熱にうかされたようにX-BASIC言語を打ち込みまくってました。
ハードディスクもダウンロードも馴染みの薄い時代。雑誌に印刷された長大なX-BASICのプログラムコードをわけも分からずに入力し、タイプミスを克服して動き出した時の感動は一生の宝です。

その宝に近い感覚が、ついにAspire 1410とWindows7で蘇ったわけです。
私にとって、「X68000」の称号は、コンピュータ製品に対する最大の賛辞であります。

2009年11月19日木曜日

Windows Power Shell、うるう年判定から、数値判定まで、クラスの静的メソッドがお役立ち!!




Windows Power Shellですが、とにかく.NET Frameworkのクラスが普通に使えるのが凄い。

今回は、クラスが備えている「静的」なメソッドについての記事です。
クラスは、オブジェクトに変換する(インスタンス化する)事によって利用が可能になりますけれど、インスタンス化前のクラスそのものが備える便利なメソッドがあります。

たとえば、うるう年の判定です。
ためしに、IsURU()というプログラムを作ってみました。
自作プログラムだと、「うるう年は、4で割り切れるが100では割り切れない。もしくは、4でも100でも400でも割り切れる年の事である」というコードを書かなければならないのですが、[DateTime]クラスが備えるIsLeapYear()メソッドを使うと一発で判定出来てしまいます。

静的メソッドは、オブジェクトのメソッドやプロパティとは呼び出し方が異なります。
[クラス]::静的メソッド()
という形になります。2009年のうるう年判定であれば、[DateTime].IsLeapYear(2009);ではなくて、[DateTime]::IsLeapYear(2009);と書きます。「::」がポイントです。

変数の値が型に適合するのかどうか、を判定する::TryParse()メソッドも各型のクラスに用意されていますし、自作プログラムの量をぐぐっと減らせる可能性があるので、色々と知っておかなければならないなぁ・・・と。

特に、コマンドシェルからコマンドを叩いてすぐに結果を画面に出す・・・という使い方が出来るWindows Power Shellだけに、手早く結果が分かる方法は沢山覚えておきたいところですね。

ファミコン、スーパーファミコン、PCエンジンを見直す

ゲームの原点を見直すべく、ファミコン、スーパーファミコン、PCエンジン(Huカード)をプレイしてみました。ゲームを携帯できるPSPは別格としても、この時代に既にテレビゲームは完成していたんじゃないかと思うくらい名作ぞろいですねぇ・・・。

当時はグラフィックが弱くて辟易したファミコンですが、アーケードの移植などは確かに無理がありますけれど、ファミコンの能力を吟味して作られたオリジナルゲームは、時代を超えて楽しめます。
さんまの名探偵」は、アドベンチャーゲームでありながら、本気出さないとクリアがおぼつかない、かつ楽しいアクションゲームが散りばめられていて、「みんなを楽しませるぞ」というナムコの開発者魂が輝いているし、メトロイドゼルダの伝説は、モデル化が非常にうまく、プレイヤーの想像力をフル活用するように作られており、むしろ第一作目が一番良いんじゃないかとさえ思えるほど。
ちなみに、ずっとプレイしたかった「ワルキューレの冒険」を初プレイしたのですが、意味不明なままモンスターにボコボコにされてGAME OVER。プレイ時間1分間くらい。
容量が少ないからいちいちヒントなんか提示してられねぇ、カンだけで進め!!
という初期のファミコンらしさ爆発です。

スーパーファミコンは、アクションとRPGがずば抜けている感じです。
クオリティだけでなくて、量もハンパじゃない。
プレイステーションでリメイクされてもなお、実はスーパーファミコン版が一番良かったと言われるソフトも結構あるみたい。
性能的にも、もしもPSPさえなければ、最新の携帯ゲーム機もかくやというレベルだから、今プレイしても特に不満を感じないのが凄い。
スーパーマリオワールドは、ヨッシーに乗れたり、多彩なアクションが異様に面白い。しかも、マリオの増殖が裏技じゃなくて普通にバンバン増やせる太っ腹な奇跡のゲームバランス

それと、RPGですねぇ。スーパーファミコンのRPGタイトルは、今からでも色々遊びたいものが多くて・・・。量がすごすぎて、どれを選べばいいのやら。

PCエンジンは、アーケードの移植が異様に気合入ってますね。当時は、家庭用ゲーム機として初めてアーケードマシンと闘えたマシンだったからか、メーカー側も浮き浮きしてる感じ。
PSPのPCエンジンアーカイブスは何故かラインナップが増えないけれど、ドンドン来てほしい。

オリジナルゲームも負けちゃいない。特にハードウェア初期のゲームが良い味出しまくり。
カトちゃんケンちゃんは、難易度の高いゲームがもてはやされた時代の風を感じます。敵が真剣にかかってきているのに、肝心のカトちゃんとケンちゃんの武器が、よせばいいのにウケを狙って短い足や当たりにくいオナラだったりするので、難易度が不必要なまでに高くなっていて、ヤバ面白い。

あと、意外とTHE功夫がハマる感じ。巨大キャラのシンプルな横スクロールアクションは意外と知らないです。
今の時代に作ったら、複雑なアクションになるだろうから、貴重品だったりするかも。グラフィックスは、今見てもかなり綺麗。ボス戦は鉄拳のつもりでいたら、主人公の体が大して動かなくてボコボコにされてしまった・・・。

とにかく、ゲームの面白さについては、ファミコン、スーパーファミコン、PCエンジンは、全然色があせてないのに驚きました。

急がば回れ?秀丸エディタ起動コード作成







今回の記事は、Windows Power Shellにて秀丸エディタなどのプログラムの起動について書かせて頂きます。

Windows Power Shellにて秀丸エディタを起動しようと思い、「hidemaru」と入力したところ、起動せず
パスを通しても起動せず。ありゃりゃ。
Invoke-Itemコマンドを使えば起動出来るのですが、同時に読み込むファイル名を指定出来ないのでイマイチ。

これは自分でコードを組むしかないか・・・。と作ってみました。
急がば回れといいますが、その通りになってしまいました。

まず、ファイル名から、フルパスを求める関数を作りました。
関数名=GetFullPath()
存在しないパスを指定されたら、とりあえずカレントディレクトリとファイル名でパスを作り直す機を実装してあります。Windows Power Shellには、Test-PathやConvert-Pathなどのパス関係の便利なコマンドが沢山あるので楽しいですよ。ちなみにマイクロソフトではコマンドをコマンドレットと呼称してますね。

これを使って、外部プログラムを起動する処理を作りました。
関数名=Go_Process()
外部プログラムを起動するのは、実は結構大変。
System.Diagnostics.Process(ダイアグナスティック=診断)というクラスをインスタンス化するのですが、単体ではあまり使えません。
これとは別立てで、System.Diagnostics.ProcessStartInfoという、実行プログラムの情報をセットするクラスをインスタンス化して、こっちに情報をセットしてから、.ProcessのStartInfoプロパティに渡してあげないといけないんですね。
回りくどいですが、これによって、プログラム名ばかりか、同時に読み込むファイルなどの引数情報や、プ呼び出し元を好きな時間待機させる機能まで実現できるので、業務プログラムなんかには絶大な威力を発揮します。

で、作りました。

hidemaru 同時に読み込むファイル名

で秀丸エディタが起動可能に。

ちなみに、
hidemaru 同時に読み込むファイル名 待機時間
で、秀丸を終了するまでコマンドシェルを待機させられます。待機時間-1で秀丸を終了するまでずろっとコマンドシェルを待機させられます。
秀丸では意味が薄いですが、Go_Process()関数は汎用的に使えるので、呼び出したプログラムが起動するまで待機という機能はいつか役立つのではないかと思います。

しかし、それにつけてもAspire 1410は便利だなぁ。
しみじみ。
寒い時でもコタツや布団の中で色々できるし、モバイルなのでクルマの中とか出先とかで使えるし。ただ、盗難や破損に最大限の注意をしなきゃあならないです。
念のため、重要情報はAspireの中には入れてません。
自宅のNASの中に格納してあるんですけれど、だからって注意を怠ってはいけないですね。

Windows Power Shellにて、EBCDICファイルからShift JISファイルへの変換をする




前回は、Windows Power Shellにおいて、Shift JIS形式のファイルを、コマンドラインだけで簡単にEBCDIC形式のファイルに変換出来るという記事を書かせて頂きました。

友達から、逆にEBCDICからShift JISへ復元(変換)する時はどうするのだ、という質問をもらいましたので、その件について書かせていただきます。

EBCDIC形式のファイルをShift JISへ変換するのは、大雑把に言って逆のコマンドを書けば良いのですが、さすがにコマンドラインにコマンドを投げっぱなしだと入力ミスした時に辛いんで、関数に仕立ててみました。
関数にしておけば、何度もコマンドを打ち込みする必要もないですし、それこそプログラムですから長くとも安心。

関数名はCodeConvertCoreにしましたが、こいつは、パラメータの指定によって、Shift JIS<--->EBCDICの両方向の変換に対応してます。
EBCDICからShift JISへの変換の時は、レコード長を変化させられます。
元々のファイルは1レコード14バイトでしたが、12バイトなどに変化させられます。
不足分は空白で補うように作ってあります。

EBCDIC形式ファイルからデータを読み取る時は、System.IO.StreamReaderクラスのReadToEnd()メソッドを使って一括で読み込み、読み込んだデータを、指定したレコード長に区切りながらShift JIS形式ファイルに出力し続ける仕組みです。