Windows Server 2008のタスクマネジャー

ここ3週間ほどWindows Server 2008を開発環境として使っている。会社の次期バージョンのソフトがWindows Server 2008をサポートすることになったので自分の開発環境をそれにしてみた。

使っていてちょっとした発見。Windows Server 2008にももちろんタスクマネジャーがついてくるが、Services(サービス)タブがWindows Server 2003と比べて一つ追加された。

Task Manager

またPerformanceタブにResource Monitorというボタンがついてきてそれを押すと下の画像のようなリソースモニターが出現しより細かなシステムリソースの監視を可能にしてくれる。

image


アメリカでのプログラマー業(3)

アメリカでのプログラマー業(2)の続きです。

その後小さなコンサルティング会社にIT管理者として就職しアメリカ人を相手に仕事をすることになった。その会社はERPソフトの販売とそれに関するコンサルティングを主なビジネスとしていた。ERPとかそれに関する知識や経験は皆無だった。働き始めた頃は英語のヒアリング力も弱かったので会議の内容が半分も理解できていなかったような気がする。でも私の仕事はウェブサイトの構築とその小さなオフィスのネットワークとコンピュータの管理だったので特に実際のビジネスの内容があまり理解できなくても、自分がやることが理解できてさえいれば、特に支障はなかった。いくら英語教師の経験があっても実際の仕事での英語の早さには面を食らった。でもそういうものにもだんだん慣れてくるものである。今でも早いし何を言っているか分からないこともあるのだが。

時はドットコムバブルの最盛期。いろんな人を見たなあ。みんながみんなそうとは限らないけど、アメリカ人って口先だけの人が結構多いと感じたのもその時だった。有名無実、有言無実行、嘘八百・・・そんなことが自分の周りでは今考えると日常茶飯事だったような気がする。例えば履歴書を偽って自分はウェブアプリの開発ができますって我が物顔で入って来た人が時給60ドルで2、3ヶ月仕事した後で結局やったのはASPの1ページでデータベースのテーブル3つぐらいからデータを引っ張って来てそれを表示させるのみのもの。彼はそれができてずいぶん誇りに思っていたようだが・・・プロジェクト管理は全くなし。ボスが毎日オフィスに入って来てどんな仕様にしたいかを延々と2、3時間話をして2、3人のエンジニアでそれを形にしようと遅くまでがんばる。一行のコードも書かれていない状態で顧客とのソフトウェア販売の契約が成立。つまり存在しないソフトを売ってしまっていたのだ。しかもその仕様が毎日変わる。そんなプロジェクト管理の視点からして完全に脱線していると初心の自分の目から見てもプロジェクトの失敗は明らかだったので、ボスにそういうことを話をしてみた。しかしぺーぺーの私に対しては全く聞く耳を持たずだった。

そんな管理の甘い会社でもアイディアさえあればベンチャーキャピタルが禿鷹のようによって来て投資をしたがるのもドットコムバブルの時代である。ベンチャーキャピタルのおっさんたちはソフトウェアとかインターネットというものがどういうものかということは全く理解できていなくて、何となくamazon.comとかeBayのように株式を公開すれば大儲けするぐらいにしか考えていなかったのだろう。その10人足らずの会社が日本円にして2億ほどの融資を受けたのだ。あれはちょうど2000年初頭の頃でそれからは管理のずさんさとビジョンのなさが相まって見事に坂道を転げ落ちるような転落ぶりを見せるのである。

つづく


パクリ

シアトルの宇和島屋で見つけたCalpisならぬNaipis。完全にパクリだな。

IMG_0756.JPG

アメリカでもカルピスは売られてますが、カルピスじゃなくてカルピコという名前で売られてます。というのはカルピスだと英語で「Cow Piss(牛の小便)」に聞こえるからだそうです。


PowerShellの起動を速くする

PowerShellのコンソールを起動すると普通のコマンドラインに比べて起動が遅いなと感じる。これは.NETの性質に由来するもので、MSIL(中間言語)を実行時にJIT(Just in Time)コンパイルするためである。実行時に機械言語へのコンパイルを行っているのだ。このJITコンパイル方式はあらゆるCPUやOSに対応させるためにインタプリタの利点を生かしたまま実行時には機械言語の処理速度を保てるという利点がある。

でも考えても見るとPowerShellが必要な環境では多種のOSで動く必要が今のところはない。速く起動してくれるに越したことはないのだ。それを実現するためにはMSILをすでに機械言語にコンパイルさせていればその実行時にその過程が不必要になるために速くなる。.NET Frameworkにはngenというのがあってこれを使うと事前コンパイルを可能にしてくれる。

ネイティブ イメージ ジェネレータ (Ngen.exe) は、マネージ アプリケーションのパフォーマンスを向上するツールです。Ngen.exe は、コンパイルされたプロセッサ固有のマシン コードを含むファイルであるネイティブ イメージを作成してローカル コンピュータのネイティブイメージ キャッシュにインストールします。ランタイムは、JIT (Just-In-Time) コンパイラを使用してオリジナルのアセンブリをコンパイルする代わりに、キャッシュにあるネイティブ イメージを使用できます。(MSDNより

そのngenを使って実際に起動を速くするスクリプトがPowerShell Team Blogに載っていたので下に抜粋しておく。

Set-Alias ngen @(
dir (join-path ${env:\windir} "Microsoft.NET\Framework") ngen.exe -recurse |
sort -descending lastwritetime
)[0].fullName
[appdomain]::currentdomain.getassemblies() | %{ngen $_.location}

上のスクリプトを.ps1ファイルに保存してPowerShellから実行してPowerShellのコンソールを起動してみると、起動が数倍速くなっている。ぜひ試してみてほしい。


HTML文字列を動的に表示

AJAXが主流になってきている昨今である。サーバ側のコードだってJavaScriptから簡単に呼び出せるようにしてくれたのがMicrosoftのAJAXだ。利点はPostBackをせずに、つまり、ページのリフレッシュをせずに動的にHTMLの要素を表示し、ユーザの使い勝手をよくしようとするものだ。この記事ではウェブサービスから返されたHTMLの文字列をJavaScriptで読み込み、それを動的に表示する方法を簡単な例で紹介する。

まずはASP .NETのプロジェクトに.asmxのファイルを追加する。ウェブサービスだからといって別途ウェブサービスのプロジェクトを用意する必要はない。この例ではSimpleService.asmxと名前をつける。そして下のようにコードを書く。

   1:  Imports System.Web.Services
   2:  Imports System.Web.Services.Protocols
   3:  Imports System.ComponentModel
   4:  Imports System.Web.UI.HtmlControls
   5:  Imports System.IO
   6:  Imports System.Text
   7:   
   8:  ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
   9:  ' <System.Web.Script.Services.ScriptService()> _
  10:  <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
  11:  <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
  12:  <ToolboxItem(False)> _
  13:  <System.Web.Script.Services.ScriptService()> _
  14:  Public Class SimpleService
  15:      Inherits System.Web.Services.WebService
  16:   
  17:      <WebMethod()> _
  18:      Public Function GetHtml() As String
  19:          ' まずはクライアント側に返したいHTMLをSystem.Web.UI.HtmlControlsにあるクラス群を使って作成する。
  20:          Dim cell1 As New HtmlTableCell()
  21:          cell1.InnerText = "Hello Cell1"
  22:   
  23:          Dim row1 As New HtmlTableRow()
  24:          row1.Cells.Add(cell1)
  25:   
  26:          Dim table As New HtmlTable()
  27:          table.Rows.Add(row1)
  28:          table.Border = 1
  29:   
  30:          ' ここからHTMLコントロールを文字列に変えるプロセス。
  31:          Dim sb As New StringBuilder()
  32:          Dim sw As New StringWriter(sb)
  33:          Dim htmlWriter As New HtmlTextWriter(sw)
  34:   
  35:          table.RenderControl(htmlWriter)
  36:   
  37:          Return sb.ToString()
  38:   
  39:      End Function
  40:   
  41:  End Class

 

上のコードをもうちょっと解説する。13行目のSimpleServiceクラスに対するAttributeは追加してやらなければいけません。これはJavaScriptから呼び出すことを可能にしますよというAttributeだ。そしてGetHtmlというFunctionを作成しStringを返すようにしてやる。もちろんWebMethodのAttributeをつけてやるのも忘れないようにする。そしてTableを作成してHtmlTableのオブジェクトをRenderControlというメソッドを実行するとStringBuilderにそのHTMLが入っているのでそれを返してやるだけだ。これでウェブサービスの準備は完了だ。

次にクライアント側だ。ASP.NETのプロジェクトを作成するとDefalt.aspxがついてくるのでそれを使う。

ASP.NETでAJAXを使うには必ずそのページにScriptManagerを追加してやらなければならない。これはformタグ内に入れてやるといい。そのScriptManager内にはServicesというコレクションが存在し、そこに先ほど書いたSimpleService.asmxへの参照を追加してやる。

<asp:ScriptManager runat="server" ID="ScriptManager1">

    <Services>

        <asp:ServiceReference Path="~/SimpleService.asmx" />

    </Services>

</asp:ScriptManager>

これでウェブサービスを直接JavaScriptから呼び出せる。

Default.aspxにHTMLボタンを貼り付けてそのonclickのイベントハンドラーで次のようなJavaScriptを書く。

function Button1_onclick() {
    AjaxTest.SimpleService.GetHtml(OnComplete, OnTimeOut, OnError);
    return true;
}

実際にコードをVS2008上で書いてみるとJavaScriptのインテリセンスが表示されるので便利だ。通常はJavaScriptからウェブサービスへのコールは非同期で行われるので上のようなコードになる。それではOnCompleteを見てみよう。

function OnComplete(arg)
{
    alert(arg);
    var divLayer = document.getElementById("divHtmlPlaceHolder");
    divLayer.innerHTML = arg;
}

ここではウェブサービスから受け取ったHTMLを一度alertで表示させて既存のdivタグ内(divHtmlPlaceHolder)に入れてやるのだ。OnErrorとOnTimeOutも下に貼り付けておこう。

function OnTimeOut(arg)
{
    alert("Call timed out");

}

function OnError(arg)
{
    alert("Error happened");
}

 

これで簡単にサーバ側のコードがJavaScript側から呼び出せる。

更新:Fiddler2でHTMLトラフィックを見てみました。Responseはこんな感じです。XMLを使わずコンパクトでいいんじゃないでしょうか。

HTTP/1.1 200 OK

Cache-Control: private, max-age=0

Content-Type: application/json; charset=utf-8

Server: Microsoft-IIS/7.0

X-AspNet-Version: 2.0.50727

X-Powered-By: ASP.NET

Date: Sun, 27 Jul 2008 23:47:37 GMT

Content-Length: 153

{"d":"\u003ctable border=\"1\"\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003eHello Cell1\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\u003c/table\u003e\r\n"}


iPhone(iTouch)の日本語入力方法

この入力方法は知らなかった。(20秒あたりぐらいから)


んまい

かみさんは時をかける少女を見ながら熟睡し、息子は就寝。あとは自分一人の時間を楽しむ。

photo.jpg


マリオ

今日は一人でシアトルに行って来た。いつものように週一度の買い出しだ。そのついでにマリオグッズを入手。

IMG_0759.JPG

ヨッシーと爆弾(?)

IMG_0761.JPG

New Marioのでかきのことクエスチョンブロック。かみさんの髪バンド。


アメリカでのプログラマー業(2)

前回のブログにも書いた通り、ちょうど日本もアメリカもITバブルまっしぐらの時に転職した。運が良かったのかもしれない。当時はどこもコンピュータ技術を持った人なら猫でもしゃくしでも採用されていた時代だ。私は猫ならぬネズミにも及ばぬ存在だった。ソフトウェアエンジニアすべての人がそれに関する学位を持っているわけではないけど、自分はそういうご時世だったので特に専門学校や大学でコンピュータ科学の学位を取らずに業界に飛び込んでいけたのかもしれない。

アメリカに来て初めての勤務した会社では貴重な経験をしたと思う。もっとも小さな会社だったので今考えるとずさんな管理で背筋が寒くなることばかりだが、当時の自分や周りのスタッフにはそんな知識はなかった。LAN内のウェブサーバにFTPでファイルあげてたくらいだから・・・それでも本を読んでメールサーバを構築したり、ウェブサーバを構築したり、IPネットワークというものがどんなものかというのを手で触って体験できたことは大変貴重だった。またPCの組み立てとかセットアップもやったし、Wordも教えたりもした。小さな会社だったので社員も少なくコンピュータに関してはなんでもやった。

Allaireがウェブサーバ側のプログラミングで快進撃を続ける中、マイクロソフトもそれに負けじとASPを押し進めていたのもこの頃だ。すっかりCold Fusionに慣れて来ていたので自分のキャリアはこれだと思っていた。Cold Fusionのエキスパートになりたかったのだ。だから近くのユーザグループの会合にも参加したし、Cold Fusionに明け暮れていたと言っても過言ではない。それは次の転職先でいとも簡単に崩されてしまうのだが。

コンピュータに自分のすべての時間をつぎ込めるという幸せを味わっていたにも関わらず、現実問題かみさんも息子も養っていかなければならなかった。健康保険はなく給料も安くボーナスだってなかった。息子はまだ小さかったからそんなにお金はかからなかったけど、3人で生活していくには余裕がなかった。それだけではなくその会社のビジョンのない付け焼き刃的な経営にも非常に不安を感じた。大きなプロジェクトがあってそれをみんなで残業して3、4ヶ月かけて終わらせても、それに対する報酬は500ドルだった。一度給料が安いと社長に直談判したが「私は給料は安いとは思いません!」と怒られて終わりだった。(笑)

社長がやりたかったプロジェクトにeBayみたいなサイトを作り、日本とアメリカの架け橋的なサイトにしたいということだった。あの時はeBayが株式を上場して一気に株価が上がった時だったから、そういう寝言を言ってたんでしょう。(笑)そもそもフルタイムで仕事してたのが三人だったから本当に寝言だったんだけどね。その会社はもう存在していない。

つづく


ecto

Mac OS X用のWindows Live Writerみたいなブログ編集用のソフトがないか探していた。

今、ectoというソフトを見つけた試して見ている。

ピクチャ 1.png

今のところはなかなかいい感じだ。