C#やASP.NETをはじめとするプログラミング技術日記を綴っていきます。
Profile
ハンドル名:♪
1972年生まれ、浦安在住
今年で個人事業11年目です。
IT導入や技術のアドバイザーをやっています。
お仕事の依頼はこちらからどうぞ。
どんな小さなことでもご相談ください。
所有資格等
Categories
Archives
Recent Entries
リンク
メールマガジン
Search
おすすめ
Recent Comments
2007年04月06日 00:54
♪
2007年04月06日 00:33
Higty
2007年02月08日 12:08
♪
2007年02月07日 16:39
fnya
2007年02月03日 00:14
tara
2006年11月27日 13:05
♪
2006年11月24日 16:21
C#初心者
2006年10月20日 22:24
通りすがり
Recent Trackbacks
LAMP環境構築
Linux、Apache、MySql、PHPの環境が作りたいということで構築メモ
Linuxはイチから入れると面倒なので、Virtual Appliance MarketplaceでVMWareのイメージ(Ubuntu)をダウンロードしました。
残りのApache、MySql、PHPは、XAMPPでまとめて入れてしまうのが楽です。
ダウンロードは↓
apache friends - very easy apache, mysql, php and perl installation without hassles
XAMPPは、Windows用もありますが、他にもVertrigoServというものもあるようです。
Apache/PHP/MySQLなどをWindowsに一発でインストールできる「VertrigoServ」
開発はWindowsで、ということであれば、VertrigoServという選択肢もありな気がします。
試しに入れてみましたが、PHP Extensionsも簡単に設定でき、使い勝手はとても良いです。
痒いところに手が届いた Windows 7
WindowsVistaは、機能を詰め込んだものの、ユーザーのニーズに合っていなかったため、なかなか売れませんでしたが、Windows 7はなかなか良さそうです。
[GIGAZINE]Vistaの次のウインドウズ「Windows 7」の新機能をスクリーンショット付きで大解説、地味に改善されていることが明らかに
[livedoor ニュース]Vistaの次のウインドウズ「Windows 7」の新機能をスクリーンショット付きで大解説、地味に改善されていることが明らかに
Vistaがボコボコに叩かれている間に着実に開発が続けられていた「Windows 7」ですが、そのスクリーンショットがついに初披露されました。タスクバーの高さが若干高くなり、Vistaにあったサイドバーは消滅、ウィジェットは好きな位置に置くのが基本となったようです。そのほかにも変更点がかなり多く、現在のVistaのダメなところを改良して改善しているのが伺えます。例えばあのウザいUACの表示強度が変更できたり、ウィジェットのアクセス方法が改善されたり、タスクトレイの改良、電卓の強化などなど。
とのこと。
確かに、新しい機能というよりは、これまで使いにくいとされてきた機能をもう一度洗いなおしたという感じです。
悪名高いUACが見直されてきたのは評価に値すると思います。
地味な変更点では、ペイントや電卓といった、これまで放置されてきたツールまでしっかり見直されている点からも、利便性の向上に力を入れていることが伺えます。
[GIGAZINE]「Windows 7」が実際に動作している様子のムービーを公開、思っているよりも動きはスムーズ
ムービーで確認できる機能で印象的なのが、ウインドウをマウスでつかんでデスクトップの上部にぶつけることによって、ウインドウが最大化するというもの。さらにウィンドウのタイトルバーをドラッグして、デスクトップの左右端にぶつけることで、縦の長さいっぱいにウインドウが広がるのが確認できます。これによって、2つのウインドウを並べて内容を見比べるといったことが簡単にできるようになっているというわけ。
どれほどのスペックのPCを使っているのか分かりませんが、かなり快適に動作している印象があります。
Vistaと違ってガジェットの位置はどこでも良さそうです。
2つのウインドウを簡単に並べるシーンにはちょっと感動。
今までは手動で地道にやってたので、これは便利です。
またベータ版が公開されてませんので、これからどうなるのか分かりませんが、かなり期待できそうです。
DB2のインストール
弁慶フレームワークにDB2を対応させるため、環境構築をしています。
インストールしたのは、DB2 Express-C 9.5 for Windowsで、使用制限があるものの、無償で利用することができ、商用利用も可能とのことです。
インストール方法については、 [DB2 Express-C 9.5 for Windows クイックインストール] を参考にしました。
.NETから利用するために、Providerが欲しいところですが、標準インストールで入るようです。
テーブル一覧、フィールド一覧の取得方法は、また後ほど書きます。
メルマガ発行は5/19に延期しました
既に2か月分ほど原稿を書いてあるので、いつでも発行できるのですが...
まぐまぐによると、発行するメールマガジンが、ウィークリーまぐまぐで紹介されるのが、5/12とのことでした。
その後、3~4日ほどで読者が急増する傾向があるようです。
メルマガは、最初のスタートダッシュが成功すると、新着ランキングに載ったりして、順調に成長できるケースが多いので、勝手ながら19日に延期した次第です。
12日の発行を楽しみにしていた方、どうもすみません。
ブログで告知したおかげもあって、読者が少しずつ増えており、大変嬉しく思っております。
メールマガジンを発行します
いつもブログを見ていただき、ありがとうございます。
今回は告知なんですが、是非ともご協力いただけますよう、お願い申し上げます。
2008/5/12(月)に、以下の2つのメールマガジンを創刊することになりました。
既にまぐまぐさんの審査も合格し、あとは12日を待つだけとなりました。
無料で購読できますので、少しでも興味がありましたら、ご購読いただけると嬉しいです。
いずれも、私がエンジニアやコンサルタントとして経験してきたこと、勉強してきたことなどを、初心者の方でも分かりやすいように説明しています。
ただ説明するだけでなく、問題提起やクイズも取り上げていきますので、読んでいるだけでパワーアップできること間違いなしです。
Obsolete属性
.NETを使っていると、たまに「古いバージョンなので推奨しません」みたいな警告が出るのですが、同様のことを Obsolete属性で実現できるようです。
一応の互換性は保ちたいものの、徐々に新モジュールに置き換えていきたいときなどに便利ですね。
Obsolete 属性によって、プログラム要素が、使用を推奨されない要素としてマークされます。要素に Obsolete とマークするたびに、属性の設定内容に応じて、警告やエラーが生成されます。次に例を示します。コードのコピー
[System.Obsolete("use class B")]
class A
{
public void Method() { }
}
class B
{
[System.Obsolete("use NewMethod", true)]
public void OldMethod() { }
public void NewMethod() { }
}この例で、Obsolete 属性は A クラスと B.OldMethod メソッドに適用されています。B.OldMethod に適用されている属性のコンストラクタで、2 つ目の引数が true に設定されているため、このメソッドを使用するとコンパイラ エラーになり、A クラスを使用すると単に警告が生成されます。一方で、B.NewMethod を呼び出しても警告やエラーは生成されません。
属性のコンストラクタで、1 つ目の引数として指定された文字列は、警告またはエラーの一部に表示されます。たとえば、次のコードを前の定義と共に使用すると、2 つの警告と 1 つのエラーが生成されます。
コードのコピー
// Generates 2 warnings:
A a = new A();
// Generate no errors or warnings:
B b = new B();
b.NewMethod();
// Generates an error, terminating compilation:
b.OldMethod();A クラスでは 2 つの警告が生成されます。1 つはクラス参照の宣言、もう 1 つはクラスのコンストラクタで生成されます。
Obsolete 属性は引数なしでも使用できますが、その項目の使用が推奨されない理由と代わりに使用する項目を引数に指定することをお勧めします。
Obsolete 属性は、シングルユースの属性です。属性を使用できる任意の要素に適用できます。Obsolete は、ObsoleteAttribute のエイリアスです。
PostSharpでアスペクト指向
.NETでアスペクト指向となると、RealProxyで面倒なコードを書かないといけないので、何もそこまでという気持ちになるんですが、オープンソースのツールで便利なものがありましたので紹介します。
PostSharp - Bringing AOP to .NET
この記事を書いている段階では、バージョン1.0.8が最新なのですが、.NET Framework 2.0、3.0、3.5に対応しています。
PostSharpが面白いところは、なんといっても、実行時ではなくビルド時にWeavingしている点でしょう。
使い方はとても簡単で、インストーラでインストールしたのち、PostSharp.Laosと、PostSharp.Publicを参照設定します。
あとは、Attributeクラスを作成し、属性でWeavingするだけなので、とても簡単でした。
詳しい使い方やサンプルは、近いうちに公開します。
アライアンスと合従連衡
最初にお願いがあります。
このエントリを読んで、少しでも思うところがあったら、コメントなりトラックバックを頂けないでしょうか。
今読んでいるのが、エントリ投稿日より月日が経過していても構いません。
また、リンク・引用大歓迎なので、気に入ったらどんどん紹介していただけると幸いです。
四字熟語では、「合従連衡」と書きますが、元々は「合従」と「連衡」の2つの言葉が合わさって出来た言葉であり、司馬遷の記した「史記」に登場する言葉です。
舞台は中国の戦国時代後半、100ほどあった国の多くは滅亡し、7国(秦・韓・魏・趙・楚・燕・斉)になっていました。
中でも西に位置する秦は急速に力をつけ、東の6国の脅威となっていました。
そこで、蘇秦という人物が登場します。蘇秦は6国を渡り歩き、秦の脅威に対抗するために同盟を結ぶことを提案します。
この同盟は秦より東の国が縦に合わさった同盟であることから、「合従」と言われています。
その後、秦に張儀という人物が現れます。
張儀は、蘇秦亡き後、6国と個別に同盟関係を結び、合従の切り崩しを図ります。
この同盟は秦が東に向かって同盟を結んでいくことから、「連衡」と言われています。
秦はこの連衡によって、敵対する勢力を滅ぼし、同盟国には臣下の礼を取らせることで、最終的に全土統一に成功するのです。
「合従」と「連衡」は、同じ同盟という手法を使っていますが、「合従」は平等な同盟であったのに対し、「連衡」は屈服に近い同盟という違いがある点に注目してください。
システム開発業界では、多重請負が常識的に行われています。
法律的に問題があるケースも多いので、よく話題になっているのですが、本当に問題なのはそこではないのです。
先の「合従連衡」を例に考えると分かるとおり、多重請負とは「連衡」であり、強者がその力でもって、弱者に臣下の礼を取らせることなのです。
請負の上位に位置する会社は、仕事を回せばどんどん儲かります。
一方で、そのしわ寄せは当然の事ながら、下位の会社に行くことは容易に想像できます。
「連衡」は強者の戦略であるため、弱者が選択すると、秦に滅ぼされた6国のような運命を辿ることが考えられます。
実際、下位の会社は大変です。赤字であっても、やらないよりマシということで、涙を呑んで受注しているケースもあります。
残業が多く、主要メンバーは負担が増えるため、職場を去っていき、得るものは少なく、失うものが多くなります。
そこで、弱者連合である「合従」という戦略を取ることが考えられます。
システム開発の世界でも、「アライアンス」という言葉があり、考え方は「合従」に似ています。
会社だけでなく、実力のある個人までを含んだ同盟を結成し、利益は事前に決めた分担比率に基づいて分配されるという仕組みです。
メリットとしては、
逆にデメリットとして、
といった点が挙げられると思います。
合従連衡の故事を見れば、弱者の戦略であることは明白なのですが、実際には上手くいかないケースの方が多いようです。
蘇秦が成立させた「合従」も、張儀の「連衡」の前に崩壊しています。
「合従」が崩壊した理由は、上記に挙げたデメリットそのもので、自国の利益だけを考え、秦と手を結ぶ国が出てきたことが原因です。
だとすると、アライアンスを成功させるためには、強固な信頼作りと他のメンバーに迷惑を掛けない仕組みが重要だと考えられます。
例えば、
多重請負が主流の業界構造は、いろいろ言われてもなかなか変わらないでしょう。
誰かが変えてくれるのを待つのではなく、戦略を持って変えていく気持ちが大事なのではないでしょうか。
このエントリは、現時点では私の思いつきでしかないのですが、いずれは様々な会社や個人さんとアライアンスが組めたらいいなと思うのです。
【SQLServer】N件目からM件目のレコードを取得する
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY OrderID, ProductID) AS ROWNUM,
*
FROM
"Order Details Extended"
) A
WHERE
ROWNUM BETWEEN 11 AND 20
ORDER BY
OrderID,
ProductID
;
SQLは簡潔明瞭ですが、サブクエリで全件返しているので、効率が良くないかもしれません。
SELECT TOP 10
*
FROM
"Order Details Extended" A
WHERE
NOT EXISTS (
SELECT
*
FROM
(
SELECT TOP 10
*
FROM
"Order Details Extended"
) B
WHERE
A.OrderID = B.OrderID
AND A.ProductID = B.ProductID
)
ORDER BY
OrderID,
ProductID
;
NOT EXISTSを使っているので、少し分かりにくいかと思いますが、要約すると、
先頭10件を除いた集合の中から、さらに先頭の10件を返す
ということになります。
【SQLServer】OracleのROWNUMを実装する(SQLServer2000以前)
SQLServer2000のときは、現在のレコードより前に来るべき行の COUNT(*)+1 を取ることで、ROWNUMの代わりとすることができますが、ソートキーが複数のときは、少し面倒くさいので例にしてみます。
テスト用データベースは、Northwindを使用しています。
SQLそのものは基本的な構文だけで書けますので、Oracle、PostgreSQL、MySQL、DB2などでも同様に実装できると思います。(文字列変換等は変えないとダメだけど)
SELECT
(
SELECT
COUNT(*)
FROM
"Order Details Extended" A
WHERE
A.OrderID < B.OrderID
) +
(
SELECT
COUNT(*)
FROM
"Order Details Extended" A
WHERE
A.OrderID = B.OrderID
AND A.ProductID < B.ProductID
) + 1 AS ROWNUM,
B.*
FROM
"Order Details Extended" B
ORDER BY
B.OrderID,
B.ProductID
;
フィールド数が多くなるほどサブクエリが増えるので、面倒くさくなります。
これを応用すると、あるグループごとに連番を振ることも可能ですね。
SELECT
(
SELECT
COUNT(*) + 1
FROM
"Order Details Extended" A
WHERE
A.OrderID = B.OrderID
AND A.ProductID < B.ProductID
) AS GROUP_NUM,
B.*
FROM
"Order Details Extended" B
ORDER BY
B.OrderID,
B.ProductID
;
SELECT
(
SELECT
COUNT(*) + 1
FROM
"Order Details Extended" A
WHERE
RIGHT('00000' + CONVERT(VARCHAR, A.OrderID), 5) + RIGHT('000' + CONVERT(VARCHAR, A.ProductID), 3) < RIGHT('00000' + CONVERT(VARCHAR, B.OrderID), 5) + RIGHT('000' + CONVERT(VARCHAR, B.ProductID), 3)
) AS ROWNUM,
B.*
FROM
"Order Details Extended" B
ORDER BY
B.OrderID,
B.ProductID
;
Int型なので、一旦文字列にしています。もちろん、元々文字列ならそのまま足せるので、ラクチンです。
Int型でも、A.OrderID * 1000 + A.ProductID のように、桁を揃えてしまう手もありますが、IntとCharが混在していることもありますので、上記のような例にしてあります。