某SIerのSEが、おすすめ書籍や仕事の話題を色々語ります。今はWindows系がメインです。→某SIerを退職しました。ASPでUTF-8等のShift_JIS以外の文字コードを扱いたい場合があります。VBScriptはShift_JISを前提として作られているため、それ以外の文字コードを扱うにはADODB.Streamオブジェクト等を使う必要がありますが、その際のつまづきやすいポイントを紹介します。UTF-8の文字コードをデコードするには以下の様な処理が必要です。WithここでポイントになるのはStream.Writeメソッドです。...上記のとおり、Writeメソッドの引数としてバリアント型にbyte配列を格納して渡して上げる必要がありますが、そもそもVBScriptでは明示的にbyte配列を記述することはできません。VBScriptでbyte配列を作り出す方法は以下を参考にして下さい。ASP)内でbyte配列を扱いたい場合があります。...例えば、上記のWriteメソッドの引数としてバリアント型にbyte配列を格納して渡して上げる必要がありますが、そもそもVBScriptでは明示的にbyte配列を記述することはできないため、工夫が必要になります。■Microsoft.XMLDOMを使ってbyte配列を作る方法はいくつかあると思いますが、一番手っ取り早いのはMicrosoft.XMLDOMを使う方法です。Microsoft.XMLDOMのHex形式の文字列("1A0FB3"のような形式)をバイト配列に変換する機能を使って、例えば以下のように関数化します。Functionあとは、この関数の戻り値をVBScriptのバリアント型の変数に格納しておけば、別の関数の引数として使うことが出来ます。ノウハウ2014年7月21日月曜日CPUってどんな仕組みで動いてるの?という人にオススメの2冊プログラムはそこそこ書けるけど、そもそもコンピュータとかCPUってどういう仕組で動いてるの?という人は意外と多いと思います。私もそうでしたが、CPUやコンピュータのハードウェアよりのアーキテクチャに関する書籍はかなりハードルが高いものが多いです。取っ付きやすい本はないかな?という人にオススメするのが以下の2冊です。上記の目次からもわかりますが基本的には2冊は似た構成です。論理回路の説明から入り、究極的には論理回路の組み合わせによりCPUが出来上がるということがわかりやすく記述されてます。CPUが機械語をどのように解釈して動くのかということも腹に落ちると思います。2冊の違いは、CPUの創り方は実際に簡易4bitCPUを作ってみようというテーマなのでハードウェアに重点を置いているのに対して、CODEはより論理的な説明に重点をおいている感じでしょうか。私自身、ハードウェアやCPUの仕組みを知りたいなと思いながらもなかなか取っ付き易い書籍が見つからなかったのですが、上記の2冊は取っ掛かりとしてオススメできます。一応十数年SEをやってきましたので、いろいろな仕事を経験しました。読者の方の何らかの気づきなればと思い、過去の業務経験を振り返ってみたいと思います。■最初の仕事はVB6で開発支援ツールの実装SEとして初めて担当したのは、主にC言語で記述された超巨大システムでした。いえ社会人1年目のSEがいきなりシステム全体を把握できるはずもないので、私が担当したのは開発作業をいかに効率化するかという仕事でした。現在は、アジャイル開発などで必要なドキュメントを減らしていく方向ですが、このシステムはガチガチのウォーターフォール型開発です。するドキュメントも大量になります。そこで私は少しでもドキュメント作成の工数を減らせるよう、C言語のソースコードを解析して、Excelの試験項目表等のドキュメントを自動生成するツール作成を担当しました。VB6で実装したと思います。C言語のソースコードを構文解析するんですが、コンパイラのような大げさなものではなく、ソースコード内の特定のキーワードやカギカッコ、改行等を元に、必要なドキュメントをExcelファイルとして自動的に作成する、というようなツールだったと思います。■学んだ技術はVB6とOfficeオートメーション技術的には、VBからExcelのオートメーション機能を使ってExcelを操作する仕組みで実装しました。最初の仕事で、まわりにVBやExcelオートメーションについて詳しい人もあまりいなかったので試行錯誤かつ自己流開発でした。■COMという技術に興味を持つこの仕事でVB6やオートメーション技術の背景にはCOMというテクノロジーがあるらしい、ということがわかり、以下のような本を読んだりして自分なりに色々勉強しました。1999-06Amazonで探すKindleで探す楽天ブックスで探すとは言えCOMという技術は、当時の自分には理解しきれませんでした。今から思うと例えば以下の様なもっとCOMの定番の本を読んでいればもう少し理解が深まったかなという気もします。IE11拡張保護モードで動作させる情報源まとめWindows8及びIE11は更にセキュリティが強化され、拡張保護モードという概念が追加されています。オブジェクト(BHO)で実装されたIEアドオンは、拡張保護モード有効時では動作しません。正確に言うと、IEから読み込まれることすらしません。既存のIEアドオンを拡張保護モード有効時に動作させるための情報源をまとめておきます。■拡張保護モードについて英語ですが、拡張保護モードについてはこの記事が一番網羅的でわかり易いと思います。BlogsMSサポートチームの人がもう少し噛み砕いたのがこちらの記事。オブジェクト(BHO)についてそもそもIEアドオンをどのようにBHOで実装するかはこの記事が参考になります。2008でも同様に作成できました。categoryにAppContainer互換を示すGUID(59fb2056-d625-48d0-a944-1a85b5ab2640)を登録する必要があります。Componentが参考になりました。categoryを正しく行ったとしても、アドオンがIEに読み込まれるようになるだけです。読み込まれたIEアドオンが、より制限された実行環境であるAppContainer内で正しく動作するかはまた別の問題であり、動作確認が必要です。想定通り動作しなかった場合はコード修正が必要になりますので注意して下さい。会社にかかってくる迷惑電話を4パターンに分類、対処法をまとめてみたSEとして会社勤めをしているわけですが、面倒なのが会社にかかってくる不動産投資等の営業電話の対応です。このいわゆる迷惑電話を4パターンに分類し、それぞれ私がどのように対応しているかをまとめてみました。■電話にでると直ぐ営業を始める一番多いのが電話に出ると、いきなり名前も確認せず「〇〇会社の方を対象に営業のご挨拶をさせて頂いております」等と営業トークを始めるパターン。この場合、私宛への電話であることを確認し、「不要です」と電話を切ってます。■いない人宛に電話を取り次ぐよう求められる「〇〇様お願いします」等と、いない人へ代わるように求められるパターン。古い名簿を元に電話をかけていると思われます。いない人には代われないので、「そのような者はおりません」と返していると大概向こうから切られます。■実際にいる人に電話を取り次ぐよう求められる実際に実在する人に代わるように言われるパターンも有ります。「〇〇は本日一日不在です」と返してます。これで大体向こうから切ってきますが、時々何時なら居ますか等と食い下がってくる営業もいます。その場合は、「予定はお伝えしかねます。電話があった旨伝言しておきますので、会社名、お名前、ご用件を教えていただけますでしょうか」と言うと、大抵はじゃあ結構ですと切られます。その人にとって必要な電話の可能性も0ではないので、電話があった旨だけはその人に念のため伝えています。怪しい電話がその人にとって必要な電話だった経験はありませんが。■役職名で取次を求められるちょっと面倒なのが「部長様お願いします」等と役職名のみで取次を求められるパターンです。この場合、「なんという名前の部長でしょうか?」と名前を確認します。向こうも名前は知らずにかけてきているので、何か適当な事をごちゃごちゃ言ってきますので、「こちらの電話からはお取次ぎできかねます」と言って電話を切ってます。■まとめこの手の営業電話は、「今忙しいので...」「興味ないので...」等と相手にできない理由を説明しようとすると「じゃあ何時なら大丈夫ですか?」「興味が無い人にこそ話を聞いて欲しい」等と食い下がられる場合があります。相手にしない理由を相手に話す必要はないので、「不要です」とバッサリ切るのが一番効率的だと思います。ライフハック2014年7月16日水曜日VBScriptフリーズ時にまず確認すべきポイントVBScriptで記述したバッチ処理がフリーズするトラブルが発生することがあります。この際にまず確認すべきポイントを紹介したいと思います。scriptworker.vbs")こんな感じで、Execメソッドを使っていれば、まず間違いなく標準出力(あるいはエラー出力)のバッファあふれによるフリーズの可能性大です。Execメソッドでの標準出力及びエラー出力のバッファサイズが4KBのため、大量に処理結果が出力されるとバッファが一杯になり処理がブロックされてしまいます。ObjectStdOut及びStdErrプロパティから標準出力結果を適宜読み出してあげればOKです。WSHのExecメソッドによると、StdOut及びStdErrプロパティから標準出力結果を適宜読み出すだけでは、場合によってはデッドロックを引き起こす可能性もあるとのこと。現場ではそのようなケースに遭遇したことはないですが、運悪くそのケースにハマった場合は標準出力をリダイレクトしてファイルに吐き出す等の対応が必要になります。エラーが発生したら、まずダンプ解析!」SEやプログラマーであれば、いざというときのトラブル解析にダンプ解析くらい出来るようになりたいと思うのではないでしょうか。私もダンプ解析について勉強したいと思いながら、なかなか手頃な書籍が見つかりませんでした。エラーが発生したら、まずダンプ解析!」です。ダンプ解析のイメージを掴むのに非常に役に立ったので紹介します。目次はこんな感じ(Amazonより抜粋)です。使用するコマンド基本的には、ダンプ解析に最低限必要なOSの知識と、例題を元にした実際のダンプ解析の実例の紹介という内容になっています。■豊富なダンプ解析例がこの本の一番の売りこの例題を元にした豊富なダンプ解析例がこの本の一番の売りです。Amazonのレビューでは「例題がわざとらしすぎ」という意見もあります。確かに私もこんな都合のいいダンプは実際にはないよ、と思う時もありましたが、ダンプ解析の方法を理解する上では、多少不自然であってもわざとらしい例のほうが理解しやすいという側面もあるのです。例題のわざとらしさはあまり気にしなくていいと思います。ヒープやプールのメモリ破壊からスレッドのデッドロックまで様々な例が挙げられており、大抵のトラブルケースがカバーされてます。■おわりにダンプ解析興味があるけど、どこから手を付けていいかわからないというSE/プログラマーの方への取っ掛かりの一冊としてオススメします。2008-11-27Amazonで探すKindleで探す楽天ブックスで探すまずはこの本でダンプ解析の雰囲気を掴んでから、更に以下の様なダンプ解析の類書を読むといいでしょう。OSそのものの知識も必要ですから、OS周りのコーディングに関する以下の書籍に挑戦するのもいいと思います。等で、Amazonの動画サービスをたまに使ってるんですが、動画配信にSilverlightが使われてるんですね。Silverlightは昔、少し触った経験があります。いっても、私の主な仕事は業務システム開発なので、検証したのは上記のような動画配信ではなく、GUIで大量データが扱えるか、とかサーバとの通信方式をどのように実装すべきかといったのようなことでしたが、結局その後特に仕事で使うチャンスがなかったです。動画配信の分野では今でもSilverlight使われてるんですかね。Windows2014年7月8日火曜日WebアプリケーションでOfficeファイルを作成する業務要件を実装する際の注意点Webアプリケーションの業務要件でサーバ上でExcel等のOfficeファイルを生成し、ブラウザからダウンロード可能とするというのがよくあります。この業務要件を実現するために、サーバサイドの開発言語(ASP.NET等)からOfficeオートメーションを使って実装している場合がありますが、マイクロソフトのサポート外の実装方式になりますので注意して下さい。http://blogs.msdn.com/b/office_client_development_support_blog/archive/2012/04/12/1-office.aspxOfficeオートメーションはクライアントアプリケーションから使われることを前提とした設定となっているため、場合によってはエラーや警告ダイアログを表示する場合があります。サーバから使われている場合、ダイアログが表示されてしまうと、そのダイアログを誰もクローズしないため、その後の処理がブロックされてしまうというのが一番の問題のようです。■解決策は?解決策はhttp://blogs.technet.com/b/sharepoint_support/archive/2014/05/07/office.aspxの内容を参考にするか、サーバサイドでの動作が保証されたサードパーティ製品を使うということになります。任意のフォルダにドライブ名を割り当てるコマンドSUBST時々、ドライブ名がハードコードされたアプリケーションの動作確認や解析を依頼されることがあります。この際面倒なのが、動作確認環境に対応するドライブ名(例えばZ:等)がない場合です。対応するドライブが存在しないとアプリケーションが正常動作しないので、何らかの方法でドライブを作成する必要があるわけですが、実際にドライブを作るのは面倒ですし、環境によっては作成できない場合もあります。SUBSTというコマンドを使うことで任意のフォルダをドライブとして割り当てることが可能です。E:\temp\F_driveとすることでFドライブが作成されます。再起動することで、作成されたドライブはなくなります。/Dと/Dオプションを使えばOKです。