2009年6月28日日曜日

[SQL Server]入会間もなくPASSJ休会…

PASSJ(SQL Server ユーザーグループ)休会のお知らせ

私はプログラマ。まだシステムエンジニアと呼べる者ではない。入社以来、主な仕事は詳細設計~プログラミング~単体テストの作業(所謂「下流」)をあっち行ったりこっち行ったり。エンドユーザーとの打ち合わせ等の「上流」作業や、システムリリースフェーズまで携わる機会は全く無かった。

そんな情けない状況の中、今年頭から始まりこの6月に完了したプロジェクトでは、初めてシステム環境のセットアップからリリース作業まで行わせていただくこととなった。しかもシステム環境は、最新技術の「.NET Framework 3.5」「SQL Server 2008」ときたものだ。それまでは殆どの仕事がニッチな某商用EUD向けJavaフレームワークの下流作業(しかもJREのバージョンは新規開発でも1.4)で、飽き飽き&つぶしが効かないことに対する不安・不満を抱いていたこともあり、今回の環境にモチベーションはだだ上がり。

「プログラミング力を磨くにはとにかく手を動かせ」と同様に、システム環境に関しても、セットアップ作業から行うのと利用するだけとでは、身になるものの量が全然違うことを実感した。その他、BTSやSubversion等、我が社では使用する文化の無い(情けない…)ツールのインストールも自由に行わせてもらえた(Subversion以外は結局利用されなかったが…)。「SQL Server 2008」に関してはまあまあ詳しくなれたと思うし、非常に楽しく、充実した数ヶ月であった。

ところで、前述の通り僕のキャリアの大半は、EUD向けJavaフレームワークを扱う仕事である。EUD向けと言うことかわわかるように、プログラミングを行わなくともシステムが作れてしまうということを売りにしている代物だ。しかし現実はノンプログラミングで済む筈もなく、多少のプログラミング(フレームワークの特性を無視した設計の場合は無駄に膨大な場合もある)の為にプログラマがお呼ばれされる。あくまで私見であるが、エンドユーザーにとっては敷居が高く、プログラマにとっては物足りないという、非常にどっちつかずのフレームワークである。物足りないので当然身になることも少なく、この仕事の需要自体あまり無さそうなので、キャリアに不安・危機感を感じている。

元々自己啓発は行う性分であり、さらに上記の不安が加わったため、勉強は割と頑張っているつもりであるが、技術コミュニティや勉強会への参加はしたことがなかった。敷居が高い感じがしまして…。でも今年からそろそろ参加してゆこうと思い、「SQL Server」であれば多少は経験積んだからそんなに引け目を感じることも無いと思ったので、「PASSJ」にちょっと前に入会した。そしてアフタースクールという名の勉強会でデビューを果たそうと思っていた。そんな矢先の冒頭のお知らせである。初めて使います、「orz」

まあ勉強会はたくさん溢れているので、IT 勉強会カレンダーとか利用して他探しますか。だけどこのカレンダーに記載されているもの、どれもレベル高そうなんだよな…。平日夜か休日開催の、RubyやAIRの初心者歓迎の勉強会ないもんですかね。

ものまねはスペアを用意しておくべきか?

ちょっと古い話になるが、マイケル・ジャクソンの訃報に関して。
僕は正直全く興味が無く、知ってる曲は中学の時英語の授業で歌わされた「We Are The World」のみ(しかも厳密にはマイケルの曲ではないんですよね、確か)。
彼の名前を聞いて連想されるものは、松本人志坊主前の頃の「ガキの使い」でのフリートーク(DVDに収録されてたっけか?)、ラジオ「放送室」でのマイケル≒同級生の藤井話やSMAP×2出演裏話、裁判可哀相といった、音楽とは全く関係無いこと。
ムーンウォークはいつか挑戦してみたいなと思っていた程度で、今回の訃報のニュースは「“冬の時代”を迎えたスポーツタレント」同じくらい「ふーん」と感じる程度でした。

ただ、この時ふと思ったことがある。ちょっと前のガキの使いの「ハイテンション ザ・ベストテン」に出てたこの人のこと。仕事大丈夫なんでしょうか?ものまね続けてたら「不謹慎だ!」とか言われたりしないんですかね?(僕は全然不謹慎だとは思いませんが)

ものまね芸人にはこういうリスクがあるのだなぁとしみじみ思った次第です。ものまねの一点張りは危険だと。「ごっつえぇ感じ」の「やすしくん」の二の舞にならないことを祈ってます。まぁこんな事になってなくてもいずれ消えるのでしょうが。

2009年6月27日土曜日

[SQL Server]ファイル出力への道

SQL Server 2008 にて、ストアドプロシージャでログファイルを出力しましょうという話が挙がった。OracleのUTIL_FILEパッケージのようなものが用意されていると思って安請け合いしてしまったが、SQL Serverにはそういうの無いんですね…

調べると、システム拡張ストアド「xp_cmdshell」を使用すれば良いとのこと。DOSコマンドをSQL Serverから実行するものらしい。要はこのストアドでechoコマンド等を実行してファイル作れと。

但し、DOSコマンドが実行できるということは、echo以外のコマンドももちろん実行できてしまい危険極まりないため、デフォルトではこのストアドは無効となっており、sysadmin権限持っていようが実行できない状態。なので、これを使用するためには、有効にするスクリプト実行したり、さらにプロキシアカウントなるものを設定したりしなければならないのだが、これら全てを1ページで解説したページが見つからなかった(またまた検索力不足?)。よって、ここにメモする次第である。

1.「xp_cmdshell」の有効化

以下のスクリプトを実行。

2.「xp_cmdshell」の実行権限付与

下図のような感じでユーザーに「実行」権限を付与する。


3.プロキシアカウント(コマンドの実行アカウント)の用意

コマンドを実行するためのOSアカウント・ドメインアカウントを用意しましょう。意図しないコマンドの実行による障害を防ぐために、権限は必要最小限にしましょう。ログファイルを出力したい場合は、出力先フォルダに対する書き込み権限を忘れずに。

4.「xp_cmdshell」とプロキシアカウントの紐付け

以下のスクリプトを実行。


以上で設定終わり。以下のようにechoコマンド呼んだらうまくいきました。

2009年6月16日火曜日

CSSの日本語コメントは危険らしい(IE限定?)

ASP.NET 2.0のWEBアプリケーションを開発していた時のこと。
TextBoxフォーカス時のIME制御の為に、以下のクラスを外部CSSに定義し、TextBoxのStyleに設定した。

動かしてみたところ、適用されない。
それどころか、上記クラス以降に定義した全てのスタイルが適用されなくなってしまった。括弧の閉じ忘れやら全角スペースが混入してるといったケアレスミスも見当たらない。何故だ?
取り敢えずCSSファイルを元に戻してみると、正常に適用された。やはり原因は上記のコードにあるようだ。

どの行が原因があるかを見極めるため、コードの1行を削除して実行ということを繰り返す。結果、「/* IMEモード 日本語入力 */」の行が悪さをしているらしいことが発覚。
えっ!?コメント行だけど?アメリカ横断ウルトラクイズの如く、頭上に「?」マークがきらめく。だが、現実だ。

今度は、この行の1文字ずつを削除して実行してみる。
犯人は、万物の生命の源である「日」でした。
これを消したら正常にスタイル適用されました。
そう言えば、もうすぐ日食ですね!

調べてみると、似たような現象で困ったという記事がいくつか見つかった。僕と同じ「日」の例は見つからなかったが。どちらもIEで発生している模様。IE限定の問題なのか?ちなみに、僕が当現象を確認したブラウザもIE6。
1番目の記事ではかなり詳細に実験を行って解説してくださっています。いや~勉強になります。
2番目の記事ではCSSファイルの文字コードを変更して「文字コード宣言」なるものを行って解決したとのこと。僕の環境のCSSファイルの文字コードを確認してみるとShift-JISでした。ASP.NETは確かUTF-8だっけか?この違いによるものなのかな…
ちなみに、文字コード宣言は極力行うべきだそうです。ただでさえ文字化け対策面倒なのに、コメントにまで気を遣わないといけないのかよ…

2009年6月14日日曜日

[.NET]ReadOnly=TrueのTextBox.ForeColorの設定が反映されない場合の対処法

TextBoxの文字列を編集させたくない場合、EnableプロパティかReadOnlyプロパティを使用する。ただ、文字の色(ForeColor)を変更したい場合、Enableを使用する方法だと設定値が無視されてしまう(常に灰色となる)。その場合はReadOnlyを使用すればよい。
※Enableの方でも変更する方法はあるにはあるのだが、カスタムコントロール作成したりと手間がかかる(参考:DOBON.NET
※EnableとReadOnlyの違いはVisual Basic 中学校参照

がしかし、ReadOnlyを使用する方法でForeColorを設定したにも拘わらず、設定が反映されない場合が存在するのだ。仕事でこの問題にぶち当たったので調べてみたが、その原因や解決法を解説した日本語サイトが見つからなかった(俺の検索力不足?)ので、ブログにメモ。

何とか見つけた情報はここ(英語)。このページによると、TextBoxのBackColorプロパティを設定しないと、ForeColorの設定が反映されないようです。

「ちょっと待て、デザイナで確認するとBackColorプロパティには「Control」が設定されているぞ」と思われるかもしれませんが、実は何も設定されていないんです。これはTextBoxクラスの設定値ではなく、親クラスのTextBoxBaseクラスの値なのです(多分)。

ちなみに、TextBoxBase.ForeColorプロパティの「解説」に、以下のような記述があります。
TextBoxBase の ReadOnly プロパティが true に設定されている場合、
このプロパティはオーバーライドされることがあります。

TextBoxクラスのReadOnlyプロパティはTextBoxBaseクラスのそれを継承したものなので、TextBox.ReadOnlyはTextBoxBase.ReadOnlyと同じものです。BackColorプロパティに関する記述はありませんが、少なくともForeColorの値はオーバーライドされることがあるようです。以上より、僕は以下の推測を立てました。
  • ReadOnly=True かつ BackColorが未設定の場合、ForeColorはデフォルト値(黒)でオーバーライドされる
ということで、ForeColorの値を反映させたければBackColorを設定してください。デフォルトの「Control」をセットしたい場合は、一回別の値に変更してから再セットしてください。値が太字(デフォルト値ではない印)になっていればOKです。



このエントリを書くに当たって再度Webを検索してたら、日本語の情報あったよ。。。 俺の検索力…

2009年6月7日日曜日

Googleカレンダーの「限定公開URL」という名の風穴

しばらく自社勤務であったが、7月から客先常駐の勤務となった。
プロジェクトの度に勤務地がころころ変わる。
嗚呼、悲しき特定労働者派遣事業よ・・・

セキュリティセキュリティなこの時代、自社のMyPCを持込可能な常駐先など殆ど無い。という訳で、僕はスケジュール管理には「Google カレンダー」を使用し、常駐先からも自社からも、そして自宅からも確認できるようにしている。

そのGoogleカレンダーでToDoリスト機能が追加されたとかいう情報を少し前耳にしたことを思い出したので、久しぶりに設定を覗いていると、「限定公開URL」なる項目を発見。


「注意: このアドレスを知っている人なら誰でもこのカレンダーの全予定を見ることができます。」が非常に気になったので、別のブラウザを起動して「HTML」ボタンのURLにアクセスしてみると・・・

丸見えじゃねぇか!!

仕事用なので非公開としているのに、これはまずい。無効にするような項目を探すが見つからない。調べてみると、どうやら不可能なようだ(有償のGoogle Apps版なら可能とのこと)。以下の記事で非常に詳しく解説されています。
上記記事にある「Pathtraq」というサービスの提供元による対策は済んでいる?そうなので、現時点(2009年6月7日時点)においてGoogleカレンダー使用に際し心得ておくこととして、
  1. 「限定公開URL」のページ内のリンクから他のページへ遷移しない
  2. 定期的に「限定公開 URL をリセット」を実行する
1.はリファラによる流出を防ぐため。カレンダーに他ページへのリンクを含めている場合は注意しましょう。※ブラウザの「お気に入り」「履歴」等で移動する場合は、リファラ送信されないから大丈夫。
「限定公開URL」には、20バイト長のランダム文字列を保持した「pvttk」というパラメータが含まれているので、当てずっぽうでアクセスされる確率は極めて低いでしょう。
が、ブルートフォース攻撃でアクセスを試みる輩がいないとも限らないので、念のため2.も行うようにしましょう。まぁ、Google側で攻撃検知したら遮断する等行ってくれると思いますが。

Bloggerで記事を書いているのであればGoogleアカウントを持っているということなので、Googleカレンダーを利用している方は多いと思います。注意しましょう。

ところで、某超有名シンガーソングライターが仕事のスケジュール管理にGoogleカレンダーを使用しているということを聞いたことがあるが、大丈夫なのかな?

ちなみに、当初の目的であったToDoリスト機能ですが、言語設定を英語(US)に設定しないといけないようです。
このことだけで導入を躊躇してしまう自分の英語レベルの低さには反吐が出るぜ…