<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://purl.org/rss/1.0/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:cc="http://web.resource.org/cc/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
    xml:lang="ja">

    <channel rdf:about="http://blog.tk-engineering.com/index.rdf">
    <title>tk-engineering.com Technical blog</title>
    <link>http://blog.tk-engineering.com/</link>
    <description>To explore strange new systems.&lt;br /&gt;
To seek out new bugs and new coding horrors.&lt;br /&gt;
To boldly go where no man has not wanted to go before.</description>
    <dc:language>ja</dc:language>
    <admin:generatorAgent rdf:resource="http://lolipoblog.jp/?v=1.0"/>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=952260" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=935393" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=844264" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=839356" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=836333" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=835261" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=833512" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=830311" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=829112" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=804475" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=803244" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=800937" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=800766" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=800138" />
        <rdf:li rdf:resource="http://blog.tk-engineering.com/?eid=793572" />
      </rdf:Seq>
    </items>
    </channel>

  <item rdf:about="http://blog.tk-engineering.com/?eid=952260">
    <link>http://blog.tk-engineering.com/?eid=952260</link>
    <title>自家製ObjectをTreeView等に突っ込む時の注意点</title>
    <description>軽めに嵌りそうになったのでメモ

MSDN-Windows Presentation Foundation データ テンプレートの概要

つまり、TreeViewとかListBoxとかが表示する時にはデフォでToStringを使うってこと。

ここで軽めに嵌ったのは、
○：Public Overrides
×：Public Overloads
×：Friend Overload...</description>
<content:encoded><![CDATA[
軽めに嵌りそうになったのでメモ<br />
<br />
<a href="http://msdn.microsoft.com/ja-jp/library/ms742521.aspx">MSDN-Windows Presentation Foundation データ テンプレートの概要</a><br />
<br />
つまり、TreeViewとかListBoxとかが表示する時にはデフォでToStringを使うってこと。<br />
<br />
ここで軽めに嵌ったのは、<br />
○：Public Overrides<br />
×：Public Overloads<br />
×：Friend Overloads<br />
コンパイルエラー：Friend Overrides<br />
というポイント。むやみやたらとスコープを狭くするクセのある人は注意。
]]></content:encoded>
    <dc:subject>.NET</dc:subject>
    <dc:date>2009-11-24T15:54:34+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=935393">
    <link>http://blog.tk-engineering.com/?eid=935393</link>
    <title>Try-Catch のネストに関するメモ</title>
    <description>こんなネストを書くのは如何かと思いながらも、こんなコード。
[VB.NET]　　　　Sub　Main()
　　　　　　　　Try
　　　　　　　　　　　　Try
　　　　　　　　　　　　　　　　Throw　New　ApplicationException(&quot;test&quot;)
　　　　　　　　　　　　Catch　ex　As　Exception
...</description>
<content:encoded><![CDATA[
こんなネストを書くのは如何かと思いながらも、こんなコード。<br />
[VB.NET]<blockquote>　　　　Sub　Main()<br />
　　　　　　　　Try<br />
　　　　　　　　　　　　Try<br />
　　　　　　　　　　　　　　　　Throw　New　ApplicationException("test")<br />
　　　　　　　　　　　　Catch　ex　As　Exception<br />
　　　　　　　　　　　　　　　　Console.WriteLine("Caught:　Level　2")<br />
　　　　　　　　　　　　　　　　Console.WriteLine(ex.Message)<br />
　　　　　　　　　　　　End　Try<br />
　　　　　　　　　　　　Console.WriteLine("End　of　normal　line　of　Level　1")<br />
　　　　　　　　Catch　ex　As　Exception<br />
　　　　　　　　　　　　Console.WriteLine("Caught:　Level　1")<br />
　　　　　　　　　　　　Console.WriteLine(ex.Message)<br />
　　　　　　　　End　Try<br />
　　　　　　　　Console.WriteLine("Hit　any　key...")<br />
　　　　　　　　Console.ReadKey()<br />
　　　　End　Sub</blockquote><br />
で、コレの結果は<br />
<blockquote>Caught: Level 2<br />
test<br />
End of normal line of Level 1<br />
Hit any key...</blockquote><br />
Exceptionは握り潰されました。<br />
じゃぁこれは？<br />
<blockquote>　　　　Sub　Main()<br />
　　　　　　　　Try<br />
　　　　　　　　　　　　Try<br />
　　　　　　　　　　　　　　　　Throw　New　ApplicationException("test")<br />
　　　　　　　　　　　　Catch　ex　As　Exception<br />
　　　　　　　　　　　　　　　　Console.WriteLine("Caught:　Level　2")<br />
　　　　　　　　　　　　　　　　Console.WriteLine(ex.Message)<br />
　　　　　　　　　　　　　　　　Throw　'<-これを追加<br />
　　　　　　　　　　　　End　Try<br />
　　　　　　　　　　　　Console.WriteLine("End　of　normal　line　of　Level　1")<br />
　　　　　　　　Catch　ex　As　Exception<br />
　　　　　　　　　　　　Console.WriteLine("Caught:　Level　1")<br />
　　　　　　　　　　　　Console.WriteLine(ex.Message)<br />
　　　　　　　　End　Try<br />
　　　　　　　　Console.WriteLine("Hit　any　key...")<br />
　　　　　　　　Console.ReadKey()<br />
　　　　End　Sub</blockquote><br />
結果は…<br />
<blockquote>Caught: Level 2<br />
test<br />
Caught: Level 1<br />
test<br />
Hit any key...</blockquote><br />
こっちはExceptionが伝播しました。<br />
<br />
どっちが欲しいのかは状況によって代わるので、きちんと理解しておかないと後で辛いと。
]]></content:encoded>
    <dc:subject>.NET</dc:subject>
    <dc:date>2009-09-22T13:36:42+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=844264">
    <link>http://blog.tk-engineering.com/?eid=844264</link>
    <title>MSDN ライブラリ 低帯域 Version</title>
    <description>kkamegawaさんに教えてもらいました−コチラの記事です。

これで、帯域幅が貧弱なウチの職場でも安心♪

なんですが、これだけではおもしろくないので、もう一歩。
通常版−英語
http://msdn.microsoft.com/en-us/library/cc488280.aspx
通常版−日本語
http://msdn.microsoft.co...</description>
<content:encoded><![CDATA[
<a href="http://d.hatena.ne.jp/kkamegawa/" target="_blank">kkamegawaさん</a>に教えてもらいました−<a href="http://d.hatena.ne.jp/kkamegawa/20090319/p1" target="_blank">コチラ</a>の記事です。<br />
<br />
これで、帯域幅が貧弱なウチの職場でも安心♪<br />
<br />
なんですが、これだけではおもしろくないので、もう一歩。<br />
通常版−英語<br />
<a href="http://msdn.microsoft.com/en-us/library/cc488280.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/cc488280.aspx</a><br />
通常版−日本語<br />
<a href="http://msdn.microsoft.com/ja-jp/library/cc488280.aspx" target="_blank">http://msdn.microsoft.com/ja-jp/library/cc488280.aspx</a><br />
低帯域−英語<br />
<a href="http://msdn.microsoft.com/en-us/library/cc488280(loband).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/cc488280(loband).aspx</a><br />
低帯域−日本語<br />
<a href="http://msdn.microsoft.com/ja-jp/library/cc488280(loband).aspx" target="_blank">http://msdn.microsoft.com/ja-jp/library/cc488280(loband).aspx</a><br />
<br />
低帯域版も、ちゃんと日本語対応してんでやんの♪<br />
ありがたい話です。<br />
<br />
ちなみに、大元ネタの VB Team blog の記事は<a href="http://blogs.msdn.com/vbteam/archive/2009/03/14/tips-and-tricks-for-finding-information-in-the-msdn-library.aspx" target="_blank">コチラ</a>です。
]]></content:encoded>
    <dc:subject>その他ツール類</dc:subject>
    <dc:date>2009-03-20T10:49:01+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=839356">
    <link>http://blog.tk-engineering.com/?eid=839356</link>
    <title>最小構成の組織について</title>
    <description>景気の良くないニュースばかり聞こえてくるこの頃でございますが、皆様如何お過ごしでございましょうか。ご多分に漏れずそういうキーワードがあちらこちらから耳に入ってくるわけです。

不景気なキーワードと言えば思い出すのが、最初の職場で私を仕込んでくれた師匠のうち...</description>
<content:encoded><![CDATA[
景気の良くないニュースばかり聞こえてくるこの頃でございますが、皆様如何お過ごしでございましょうか。ご多分に漏れずそういうキーワードがあちらこちらから耳に入ってくるわけです。<br />
<br />
不景気なキーワードと言えば思い出すのが、最初の職場で私を仕込んでくれた師匠のうちのお一方が吐いた台詞。<br />
<blockquote>電気消すより役に立たんオヤジの一人でも消した方が、よっぽど効果あるわ。</blockquote><br />
<br />
誠にごもっとも。諸手を挙げて賛成です。<br />
が、往々にして、そう言われる人々は「既得権」の安全圏に居るわけで、標的にされるのは現場の下々と相場は決まっています。<br />
<br />
ここで腕に確かな覚えと、十分な預金残高があれば威勢の良い啖呵が切れると言うものです（備えあれば憂いなし！）<br />
<br />
ですが、問題はその後−残される側の話。<br />
F.Brooks の法則（というか呪い？）が指摘するとおり、人の教育にはリソースが必要で、その期間中は生産性がマイナス方向に変化する訳です。この事を頭に入れた上で、次の状況を考えてみます。<br />
<br />
１）組織を「最小構成」にまでリストラする<br />
　　つまり、全員が100%近い稼働率でなんとか仕事を回せる状態にまで人を減らす。<br />
２）「余計な出費」、特に残業代・外注費は罷り成らんというお達しが、「その筋」より発せられる。<br />
３）この状態で、何かのプラス方向の変化、つまり仕事が増える方向の変化が発生する。<br />
　　例えば、営業部門が必死の努力で新ネタを拾ってきた。<br />
<br />
さて、この状態。経験のある現場担当者なら背筋に冷たい物が走る−走って然るべき状況です。<br />
既に稼働率は100%近く。外だしも要員補充も罷り成らんどころか、そのためのオーバーヘッドすら吸収する余地がない。つまり、要員構成としては「手詰まり」な状況です。<br />
これでマネージャーに何をしろと？？<br />
<br />
ここで、現場マネージャーが打てる手は…<br />
無償の残業（サービス残業、或いは「パケ放題」な管理職を残業させる）により、なんとか仕事をこなすぐらいです。<br />
前者は士気を完膚無きまでに地に落とし（そして訴訟リスクを背負い）、後者は組織としての『学習』が無いままに−つまり組織としての未来を得ること無しに−それぞれ前に進むだけです。そして、彼らが燃え尽きて去っていった後には、ペンペン草一つ生えない、不毛の荒野が残るだけ。<br />
<br />
<br />
確かに、明日のビフテキより今日の掛蕎麦。それは否定する気はありません。しかし、一所懸命働いているスタッフに夢の一つも見せられない、「今日のメシが食えるだけシアワセと思え」な職場。首切りが怖くて残っているヤツばかりの職場<em>（＝腕に覚えのあるヤツはさっさと自分の意志で去っていく）</em>。<br />
<br />
それってどうなのよ、そんな組織で本当にいいの？？と言いたくなる今日この頃だったりします。
]]></content:encoded>
    <dc:subject>下らんグチ話</dc:subject>
    <dc:date>2009-02-28T03:00:49+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=836333">
    <link>http://blog.tk-engineering.com/?eid=836333</link>
    <title>悪魔の代理人としての現場管理者</title>
    <description>部下に対しての話じゃなくて、上司に対しての話。

いつものように上司にお白州に呼び出されて、プロジェクトに現状を言上するわけです。

その時心がけていること。
・耳障りの悪いことを敢えて言うこと

つまり
・耳障りの良いことばかり言うヤツは要らない

順風満帆万事順調、そ...</description>
<content:encoded><![CDATA[
部下に対しての話じゃなくて、上司に対しての話。<br />
<br />
いつものように上司にお白州に呼び出されて、プロジェクトに現状を言上するわけです。<br />
<br />
その時心がけていること。<br />
・<strong>耳障りの悪いことを敢えて言うこと</strong><br />
<br />
つまり<br />
・耳障りの良いことばかり言うヤツは要らない<br />
<br />
順風満帆万事順調、そんなオメデタイ仕事なんぞある訳がないので、どこかにリスク要因があり、どこかに問題があるはずです。<br />
それを見つけ出してアラートをあげるのも、現場管理者の重要な仕事のはずです。<br />
<br />
で、そういう情報は上層部としては耳障りが良かろうはずがなく、<br />
従って、最後は「なんでおまえは物事に対してそう悲観的なんだ！」仕舞いには「要するにやる気がないんだろ！」とか、そういうコトを言われる場合もあるでしょう。<br />
<br />
が、毎回「順調です」と報告しておいて、突然（いつものように）大炎上が始まるのと、どちらがあるべき姿かという議論はするまでもないでしょう。<br />
<br />
なので、現場管理者は上司に対して悪魔の代理人のように、悪い報告の方を重点的にあげる必要があると思うわけです。<br />
<br />
で、上司がそういう報告に耳を貸さない、する度に（上記の例のように）怒鳴りつけられるとあれば、それは履歴書をアップデートするべき時でしょう。<br />
<br />
<br />
<em>但し、『ものには言い方ってもんがある』ことを心がけておく必要はあります。</em>
]]></content:encoded>
    <dc:subject>下らんグチ話</dc:subject>
    <dc:date>2009-02-15T13:43:59+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=835261">
    <link>http://blog.tk-engineering.com/?eid=835261</link>
    <title>oramts.dll はドコにいる？</title>
    <description>Oracle Services For Microsoft Transaction Service の話。

やってて怒られた（DLLNotFoundException)ので、一体どこから落とせるんだ？と探した結果は、灯台もと暗し。

OTN辺りから落としてくるのではなく、Oracle client インストール時のオプションで入るのです。
デフォ...</description>
<content:encoded><![CDATA[
Oracle Services For Microsoft Transaction Service の話。<br />
<br />
やってて怒られた（DLLNotFoundException)ので、一体どこから落とせるんだ？と探した結果は、灯台もと暗し。<br />
<br />
OTN辺りから落としてくるのではなく、Oracle client インストール時のオプションで入るのです。<br />
デフォルトの「開発者」「instant client」では入らないので、「カスタム」を選択して、"Oracle Services For Microsoft Transaction Service " にチェックを入れる必要があります。<br />
<br />
ググりまくってかなり時間を浪費したのでメモと言うことで。
]]></content:encoded>
    <dc:subject>その他ツール類</dc:subject>
    <dc:date>2009-02-11T10:36:20+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=833512">
    <link>http://blog.tk-engineering.com/?eid=833512</link>
    <title>SQL Express で複数インスタンス存在する場合にIPのみで接続する方法</title>
    <description>SQL Server Express で複数のインスタンスがあり、かつ、接続使用とするツールの「接続設定」に「IP」しか無い場合の設定方法。

普通の場合は、[サーバー名]&amp;yen;[インスタンス名] で接続できます。
(Expressではない) SQL Server の Management Studio からもこれで接続で...</description>
<content:encoded><![CDATA[
<a href="http://www.microsoft.com/japan/sql/editions/express/default.mspx" target="_blank">SQL Server Express</a> で複数のインスタンスがあり、かつ、接続使用とするツールの「接続設定」に「IP」しか無い場合の設定方法。<br />
<br />
普通の場合は、[サーバー名]&yen;[インスタンス名] で接続できます。<br />
(Expressではない) SQL Server の Management Studio からもこれで接続できます。<br />
<br />
が、そうではないツール類で、そういう入力が出来ない場合。ありがちな例としては、<br />
・サーバーのIPアドレス（ご丁寧にガチ入力チェック付き）<br />
・データベース名<br />
・ポート番号<br />
・ログインID/パスワード<br />
しか入力できない場合−インスタンス名が入れられないのです。<br />
<br />
こういう場合は、<br />
「構成マネージャー」から「ネットワークの構成」→「[インスタンス名]のプロトコル」で、TCP/IPを右クリックして「プロパティ」。出てきた画面の「IPアドレス」のタブをクリック。<br />
一番下に「TCPポート」と「TCP動的ポート」があるので、それがそのインスタンスのポート番号です。<br />
このポート番号を指定して接続できます。<br />
<br />
で、ポート番号も指定できないような状況なら、インスタンスのポート番号を規定値（1433）に変更してしまうのも一法でしょう（きっと）。<br />

]]></content:encoded>
    <dc:subject>その他ツール類</dc:subject>
    <dc:date>2009-02-03T13:21:14+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=830311">
    <link>http://blog.tk-engineering.com/?eid=830311</link>
    <title>Oracle SQL Developer</title>
    <description>Oracle上での開発作業と言えば&quot;SI Object Browser&quot;。
コレがなければ夜も日も明けない。

が、それの本家版、Oracle SQL Developer
Oracle製である上に無償（DB本体のライセンスがあることが条件）。

と、言うことで使ってみた感想とその罠とかのメモ。
・良くも悪くもOracle風...</description>
<content:encoded><![CDATA[
Oracle上での開発作業と言えば"<a href="http://www.sint.co.jp/products/siob/ob/" target="_blank">SI Object Browser</a>"。<br />
コレがなければ夜も日も明けない。<br />
<br />
が、それの本家版、<a href="http://www.oracle.com/technology/global/jp/products/database/sql_developer/index.html" target="_blank">Oracle SQL Developer</a><br />
Oracle製である上に無償（DB本体のライセンスがあることが条件）。<br />
<br />
と、言うことで使ってみた感想とその罠とかのメモ。<br />
・良くも悪くもOracle風。SQL Server ばかりやってきた目からすると、「かゆいところに手が微妙に届かない」<br />
・SQL Server, Access, MySQL に接続可能<br />
・PL/SQLのデバックも出来る…らしい（まだ試してない）<br />
・SQL Server からの移行ツールはなかなか出来がよい<br />
・が、やはり全自動というわけにはいかない（それでも凄い）<br />
・生成されるSQL文、一部で「引用符が欠落してエラーになってしまう」問題がある<br />
・11gに同梱のモノはバージョンが古いので、最新(1.2)を落としてくる必要がある<br />
・頑張れば1.5が米国から落とせるらしいが、労多くして功少なし<br />
・例によって英語<br />
・エラーを返すのは良いのだが、意味不明（メッセージすら返却しない）ことがある。<br />
・結果ペインのグリッド表示って無いの？？<br />
<br />
とまぁ色々あるのですが、実際にはかなり使えることも事実。<br />
まぁ、こんなのもありますよってことで。
]]></content:encoded>
    <dc:subject>その他ツール類</dc:subject>
    <dc:date>2009-01-20T16:05:10+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=829112">
    <link>http://blog.tk-engineering.com/?eid=829112</link>
    <title>Oracle 11g の Oracle Enterprise Manager Database Control</title>
    <description>軽めに嵌った点と評価できる点のメモ。

サーバー環境は、Windows 2003 Server R2 (E) + IE6 （なぜIE7でないのかは突っ込まないこと）。その上に Oracle 11g (E)

・10g からの流れで「Enterprise Manager」を探してしまうが、「Database Control」という名前になっている。
...</description>
<content:encoded><![CDATA[
軽めに嵌った点と評価できる点のメモ。<br />
<br />
サーバー環境は、Windows 2003 Server R2 (E) + IE6 （なぜIE7でないのかは突っ込まないこと）。その上に Oracle 11g (E)<br />
<br />
・10g からの流れで「Enterprise Manager」を探してしまうが、「Database Control」という名前になっている。<br />
・クリックしてみると、IEが起動して色々と警告が出てくる。その結果として空白ページ。<br />
・アドレスバーには"https://[サーバー名]:1158/em"とでている。<br />
・これをIEの「信頼済みサイト」に追加する<br />
→これで表示されるようになる。（ここまでで15分ほど嵌った）<br />
<br />
で、https なら、他の端末からでも行けんじゃね？ということで、自端末からアクセスを試みてみる。<br />
自端末は Vista (J) + Firefox3<br />
・「不正なセキュリティ証明書です」と、Firefoxが警告を発する<br />
・表示されている内容に従って、「例外サイト」として登録する。<br />
→Firefoxの指示するままに登録していけば、表示されるようになる。<br />
<br />
ならば、ということで、IE7 (Vista)。<br />
・同じように「セキュリティ証明書の警告」が表示される。<br />
・「このサイトの閲覧を続行する（推奨されません）。」をクリック<br />
→「証明書のエラー」として、アドレスバーが赤表示になるが、とりあえず表示される。<br />
<br />
<br />
で、評価できる点について。<br />
上記のようにサーバーOS、インストールしたOracle 共に英語版なのですが、自機（Vista日本語版) からブラウザ経由でアクセスしたら、表示が日本語だった点。<br />
思わず「やるな！」と思ってしまいました。<br />
<br />
------<br />
追記：エラーメッセージが化けるというオチがつきましたが、エラー番号は読めるからそれで良いんだよね、きっと…<br />

]]></content:encoded>
    <dc:subject>その他ツール類</dc:subject>
    <dc:date>2009-01-15T13:26:38+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=804475">
    <link>http://blog.tk-engineering.com/?eid=804475</link>
    <title>【小ネタ】優先度で知る他所の組織</title>
    <description>同じ組織（例：同じお客さん）の違う担当者から
「最優先でやってください」
「ほかの作業止めてでもやってください」
が競合するとき、その組織は Out of control です−きっと。

そして、その「最優先」のために他のコトが遅れたことを責められるならば、その組織は相当にや...</description>
<content:encoded><![CDATA[
同じ組織（例：同じお客さん）の違う担当者から<br />
「最優先でやってください」<br />
「ほかの作業止めてでもやってください」<br />
が競合するとき、その組織は Out of control です−きっと。<br />
<br />
そして、その「最優先」のために他のコトが遅れたことを責められるならば、その組織は相当にやばいでしょう−きっと。<br />
<br />
理由：組織プレーにおいて「右手がやっていることを左手が知らない」という状況は、一番あってはいけないこと。むしろ、それは組織プレーではない。11人の烏合の衆が集まった玉蹴りゲームをサッカーとは呼ばない。
]]></content:encoded>
    <dc:subject>下らんグチ話</dc:subject>
    <dc:date>2008-10-06T20:10:11+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=803244">
    <link>http://blog.tk-engineering.com/?eid=803244</link>
    <title>さようなら、MS-IME、おかえり、ATOK</title>
    <description>Windows 95 の時代から連綿と使ってきたわけですが、さすがに愛想が尽きました。このVista版、使えば使うほどバカになっていくような感じでして。

そんなわけで、ATOK2008にお乗り換えでございます。
MS-DOS時代にはATOK7とかでお世話になったので、それ以来実に10年以上ぶ...</description>
<content:encoded><![CDATA[
Windows 95 の時代から連綿と使ってきたわけですが、さすがに愛想が尽きました。このVista版、使えば使うほどバカになっていくような感じでして。<br />
<br />
そんなわけで、ATOK2008にお乗り換えでございます。<br />
MS-DOS時代にはATOK7とかでお世話になったので、それ以来実に10年以上ぶりのご無沙汰です。<br />
<br />
で、使ってみた印象としては、「実に快適」。<br />
金を出してでも、いいものはいいのです。さすがに金掛かってるだけのことはあります。<br />
アンドゥやら入力の取り消しやらのよく使う動作もIMEより柔軟な漢字です。<br />
さらに、意外と使えるのが「単漢字情報」ウィンドウ。漢字がでかく表示され、読みとか部首の情報も出るので、「字引」としても便利。<br />
加えて、操作キーのガイダンスもツールチップ上に出たりするので、いちいち覚えてなくても快適。<br />
<br />
かゆいところに手が届くってなもんです。<br />
<br />
そんなわけで、<br />
さようなら、MS-IME<br />
おかえり、ATOK
]]></content:encoded>
    <dc:subject>その他ツール類</dc:subject>
    <dc:date>2008-10-01T19:15:27+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=800937">
    <link>http://blog.tk-engineering.com/?eid=800937</link>
    <title>Shared のメンバ変数を公開しないこと</title>
    <description>先日、こんなソースを見かけまして。
[VB.NET]
Public Class Hoge
　Public Shared fugafuga as String
　'...以下略

思わず寒気を感じた訳です。Shared変数は「そのような変数を Shared で宣言した場合、すべてのインスタンスがストレージ内の同じ場所にアクセスするため、あ...</description>
<content:encoded><![CDATA[
先日、こんなソースを見かけまして。<br />
<blockquote>[VB.NET]<br />
Public Class Hoge<br />
　Public Shared fugafuga as String<br />
　'...以下略<br />
</blockquote><br />
思わず寒気を感じた訳です。Shared変数は「そのような変数を Shared で宣言した場合、すべてのインスタンスがストレージ内の同じ場所にアクセスするため、あるインスタンスが変数の値を変更すると、すべてのインスタンスが変更後の値にアクセスするようになります。」[<a href="http://msdn.microsoft.com/ja-jp/library/zc2b427x(VS.80).aspx" target="_blank">出典：MSDN ライブラリ- Shared(Visual Basic)</a>] なので、昔のグローバル変数なみに訳の判らないことになる恐れがあるのです。<br />
例えばこんなコード（及び改善例）<br />
<blockquote>[VB.NET]<br />
Module Module1<br />
<br />
　　Sub Main()<br />
　　　　<span style="color:#008000">'---ダメな方のHogeの例</span><br />
　　　　<br />
　　　　Dim objHoge1 As New HorrorHoge<br />
　　　　objHoge1.mstrHoge = "Instance"<span style="color:#008000">'---←コンパイラが警告を出します</span><br />
　　　　HorrorHoge.mstrHoge = "DirectHoge"<br />
　　　　Console.WriteLine("Via Instance")<br />
　　　　objHoge1.PrintHoge()<span style="color:#008000">'---←コンパイラが警告を出します</span><br />
<br />
　　　　HorrorHoge.mstrHoge = "DirectHoge"<br />
　　　　Console.WriteLine("DirectHoge")<br />
　　　　HorrorHoge.PrintHoge()<br />
<br />
　　　　Console.WriteLine("Hit any key...")<br />
　　　　Console.ReadKey()<br />
<br />
　　　　<span style="color:#008000">'---マシなほうのHoge</span><br />
　　　　Dim objBetterHoge1 As New BetterHoge<br />
　　　　objBetterHoge1.Hoge = "hoge"<br />
　　　　Dim objBetterHoge2 As New BetterHoge<br />
　　　　objBetterHoge2.Hoge = "fuga"<br />
　　　　Console.WriteLine("Better Hoge1")<br />
　　　　objBetterHoge1.PrintHoge()<br />
　　　　Console.WriteLine("Better Hog2")<br />
　　　　objBetterHoge2.PrintHoge()<br />
<br />
　　　　Console.WriteLine("Hit any key...")<br />
　　　　Console.ReadKey()<br />
<br />
　　End Sub<br />
<br />
End Module<br />
<br />
<span style="color:#008000">'ダメな方のHoge</span><br />
Public Class HorrorHoge<br />
　　<span style="color:#008000">'Sharedなメンバ変数をPublicで公開します</span><br />
　　Public Shared mstrHoge As String<br />
<br />
　　Public Shared Sub PrintHoge()<br />
　　　　Console.WriteLine("mstrHoge=" & mstrHoge)<br />
　　End Sub<br />
<br />
End Class<br />
<br />
<span style="color:#008000">'マシな方のHoge</span><br />
Public Class BetterHoge<br />
<br />
　　<span style="color:#008000">'とりあえずPropertyにしておきます</span><br />
　　Private mstrHoge As String<br />
　　Public Property Hoge() As String<br />
　　　　Set(ByVal value As String)<br />
　　　　　　mstrHoge = value<br />
　　　　End Set<br />
　　　　Get<br />
　　　　　　Return mstrHoge<br />
　　　　End Get<br />
　　End Property<br />
<br />
　　Public Sub PrintHoge()<br />
　　　　Console.WriteLine(mstrHoge)<br />
　　End Sub<br />
<br />
End Class<br />
</blockquote>で、実行結果は…<br />
<blockquote>Via Instance<br />
mstrHoge=DirectHoge<br />
DirectHoge<br />
mstrHoge=DirectHoge<br />
Hit any key...<br />
Better Hoge1<br />
hoge<br />
Better Hog2<br />
fuga<br />
Hit any key...<br />
</blockquote>…ダメな方の<br />
objHoge1.mstrHoge = "Instance"<br />
は、ビット列の彼方に消え去っていきました。<br />
<br />
そんな訳で、Sharedのメンバ変数には十分に気をつけましょうというお話でした。<br />
<br />
<br />
で、問題のそのクラス、全てのメソッドがSharedで宣言されていたのですが、全てのメソッドがSharedなら、何故メンバ変数を公開する必要があるの？？等など、疑問の尽きないコードでありました。
]]></content:encoded>
    <dc:subject>下らんグチ話</dc:subject>
    <dc:date>2008-09-22T17:45:01+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=800766">
    <link>http://blog.tk-engineering.com/?eid=800766</link>
    <title>オフショアプロジェクトについての雑感</title>
    <description>今更ながらオフショアネタです。数回オフショアプロジェクトとかかわりを持ったのですが、ソコからの雑感。

まず、なんでオフショアなの？という動機が不純(?)なモノは、必ず失敗するでしょう。
日本と同じ品質を、同じ期間で、しかも安い費用で、今すぐに。
そんな都合のい...</description>
<content:encoded><![CDATA[
今更ながらオフショアネタです。数回オフショアプロジェクトとかかわりを持ったのですが、ソコからの雑感。<br />
<br />
まず、なんでオフショアなの？という動機が不純(?)なモノは、必ず失敗するでしょう。<br />
日本と同じ品質を、同じ期間で、しかも安い費用で、今すぐに。<br />
そんな都合のいい話があれば、とっくに誰もが飛びついているでしょう。世の中そんなに甘くはありません。<br />
<br />
費用が安い分だけ、品質や期間を我慢する、レスポンスの悪さを我慢する。そういう良い意味での割りきりが無いと、双方が不幸になるだけで終わってしまいます。<br />
<br />
そして、オフショア側を「育てる」ことも必要になります。日本で国内の外注先を「育てる」のと比べて、何倍もの時間が必要になります。たとえオフショア側が日系企業であっても自社の子会社であっても同じこと。<br />
<br />
また、（いつものように）プロジェクトが上手くいかない時、それは何故なのかというのを、キチンと冷静に判断して次に生かすという視点がないと、人は安易な結論に飛びつきたがるので、全ての原因が「オフショアに出したせい」になりかねません−<em>日本でも普通に起きる事象に対してさえも</em>−。<br />
<br />
そうやって、上手く行きかけのモノさえも潰してしまったオフショアプロジェクト−そう言うのをよく見かける訳です。
]]></content:encoded>
    <dc:subject>下らんグチ話</dc:subject>
    <dc:date>2008-09-22T01:02:26+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=800138">
    <link>http://blog.tk-engineering.com/?eid=800138</link>
    <title>List(Of T).Remove で要素が見つからなかった時</title>
    <description>List(Of T) でも、Dictionary(Of TKey,TValue) でも、要素を削除するのに Remove メソッドを使う訳ですが、その要素が見つからなかった場合でも、Exception は Throw されません。
Microsoft.VisualBasic.Collection.Remove や System.Collections.SortedList.Remove は Ex...</description>
<content:encoded><![CDATA[
List(Of T) でも、Dictionary(Of TKey,TValue) でも、要素を削除するのに Remove メソッドを使う訳ですが、その要素が見つからなかった場合でも、Exception は Throw されません。<br />
Microsoft.VisualBasic.Collection.Remove や System.Collections.SortedList.Remove は Exception を投げてくれます。<br />
<br />
その代わりに、動作結果を Boolean で返却してくれます−削除すべき要素が無かったら、"FALSE"を返してくれます。<br />
( System.Collections.ArrayList は何も返してくれません。）<br />
<br />
なので、List(Of T) や Dictionary(Of TKey,TValue)で「きちんと削除されたか確認したい」場合には、返値を判断することになります。<br />
<br />
<br />
なんでこんなことを書いているのか。先日、「RemoveしているはずなのにRemoveされていない」という事象に出会ったのですが、そのコード（判りやすくするためにかなり簡略化しています）。<br />
<BlockQuote>[VB.NET]<br />
'HogeCollection は List(Of Hoge)<br />
Dim lstHoge As New HogeCollection<br />
lstHoge.Add(New Hoge("1","1"))<br />
lstHoge.Add(New Hoge("2", "2"))<br />
'中略...<br />
lstHoge.Remove(New Hoge("1","1"))<br />
'↑<br />
'ここが問題箇所：Remove されません<br />
</BlockQuote><br />
この問題箇所で返値を見てみると、FALSEになっている訳です。<br />
<br />
で、これをこんな風に直してみました。<br />
<br />
<BlockQuote>[VB.NET]<br />
'HogeCollection は List(Of Hoge)<br />
Dim lstHoge As New HogeCollection<br />
lstHoge.Add(New Hoge("1","1"))<br />
lstHoge.Add(New Hoge("2", "2"))<br />
'中略...<br />
lstHoge.Remove(lstHoge.Item("1","1"))<br />
'↑<br />
'中から探し出してきてRemoveする。これは動く。</BlockQuote><br />
<br />
各メンバが全く同じオブジェクトを作って、それに「替え玉」させようったって、それはいけませんよ−という例でした。
]]></content:encoded>
    <dc:subject>.NET</dc:subject>
    <dc:date>2008-09-19T17:45:35+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

  <item rdf:about="http://blog.tk-engineering.com/?eid=793572">
    <link>http://blog.tk-engineering.com/?eid=793572</link>
    <title>DirectoryServices の HRESULT 一覧</title>
    <description>DirectoryServices でドメインコントローラーとあれこれやり取りをしようとして失敗すると Exception が返ってくるわけです。
それは良いとして、ex.Message が珍妙な内容であることが多いのです。

「サーバーは利用できません。」…いや、サーバー動いてるし。
「サーバーか...</description>
<content:encoded><![CDATA[
DirectoryServices でドメインコントローラーとあれこれやり取りをしようとして失敗すると Exception が返ってくるわけです。<br />
それは良いとして、ex.Message が珍妙な内容であることが多いのです。<br />
<br />
「サーバーは利用できません。」…<em>いや、サーバー動いてるし。</em><br />
「サーバーから紹介が返ってきました。」…<em>出会い系spamですか？</em><br />
<br />
で、よく見ると、HRESULT の値が入っているわけです。<br />
中身はCOMで動いているらしいので、伝統のHRESULTが返却されている訳ですね。<br />
<br />
で、それぞれの値が何を意味するのか。探してみたところ、よい一覧がありました。原因と対策付です。英語です。<br />
<br />
<a href="http://www.computerperformance.co.uk/index.htm" target="_blank">Computer Performance</a> より、<a href="http://www.computerperformance.co.uk/Logon/logon_scripts.htm" target="_blank">Logon Scripts</a>→"Help with Logon Scripts" の <a href="http://www.computerperformance.co.uk/Logon/code/index.htm" target="_blank">800xxxx Error Codes</a> です。<br />
<br />
番号順に記述されているので、非常にわかりやすいです。<br />
<br />
但し、記述されている番号は16進表記です。したがって、Visual Studio 内や実行時に表示される10進表記を16進変換してから調べる必要があります…が、そこは、Windows付属の「電卓」が変換してくれます（16進なんか入力できないよって人は、表示(V)→関数電卓(S)をどうぞ）。<br />
<br />
<br />
また、同様に"Help with Logon scripts"　にある <a href="http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm" target="_blank">LDAP Properties</a> は、あの呪文のようなLDAPクエリの文字列を解説してくれています。まさに "Hall of fame"という感じです。<br />
<br />
ご紹介まで。
]]></content:encoded>
    <dc:subject>.NET</dc:subject>
    <dc:date>2008-08-25T18:56:28+09:00</dc:date>
    <dc:creator>tkinugaw</dc:creator>
    <dc:rights>tkinugaw</dc:rights>
  </item>

</rdf:RDF>