・中小規模な組織の社内SEにとってのシステム開発 他をつづります。 ・問題解決のヒント集、糸口をめざします。 細かい内容は別途検索してください。 ・コメントは匿名でも、自由にどうぞ。
2013年9月25日水曜日
2013年8月8日木曜日
netstat コマンド
netstat コマンド
-an
ポート番号調査
-o
プロセスID表示、タスクマネージャやtasklistコマンドと組み合わせてプログラムを特定する。
(tasklist /svc で詳細なサービスを調べることができる)
-bv
実行ファイル名、関連しているコンポーネントのファイル名(DLLファイル名など)も表示する。
※1つずつプログラムを停止して、どのプログラムが使用しているのかを
調査することもできる
-an
ポート番号調査
-o
プロセスID表示、タスクマネージャやtasklistコマンドと組み合わせてプログラムを特定する。
(tasklist /svc で詳細なサービスを調べることができる)
-bv
実行ファイル名、関連しているコンポーネントのファイル名(DLLファイル名など)も表示する。
※1つずつプログラムを停止して、どのプログラムが使用しているのかを
調査することもできる
2013年6月25日火曜日
単体テスト その2
単体テストを書くことで、次回以降のテストが容易になる。便利である。
何度も繰り返すときに、非常に威力を発揮するように思う。
しかし、Visual Studio の単体テスト機能を利用していてテストが作成できない
ときがある。もう1つの対処法についてメモ。
手動でいろいろと追加することで作成できる。
・テストのプロジェクトに、他のうまくいっているものを参考に
あたらにテストクラスを作成する。
・テストのプロジェクトの参照設定に、テスト対象のプロジェクトを登録する。
・テスト対象のプロジェクトで、ソースコード中で右クリックすると、
「プライベートアクセサー」の作成 というものがあるので、
選択する。
これによりフォームをテストするときなどに、プライベートな変数やメソッドにアクセスできるようになり、
テストが可能になる。
Form1_Accessor target = new Form1_Accessor();
target.textBox1.Text = "test";
のような感じでフォームの要素にアクセスできるようになる。
なお、プロジェクトのフォルダの場所を移動すると、テストプロジェクトの参照設定などを
再度設定しなおさないといけないようだ。
何度も繰り返すときに、非常に威力を発揮するように思う。
しかし、Visual Studio の単体テスト機能を利用していてテストが作成できない
ときがある。もう1つの対処法についてメモ。
手動でいろいろと追加することで作成できる。
・テストのプロジェクトに、他のうまくいっているものを参考に
あたらにテストクラスを作成する。
・テストのプロジェクトの参照設定に、テスト対象のプロジェクトを登録する。
・テスト対象のプロジェクトで、ソースコード中で右クリックすると、
「プライベートアクセサー」の作成 というものがあるので、
選択する。
これによりフォームをテストするときなどに、プライベートな変数やメソッドにアクセスできるようになり、
テストが可能になる。
Form1_Accessor target = new Form1_Accessor();
target.textBox1.Text = "test";
のような感じでフォームの要素にアクセスできるようになる。
なお、プロジェクトのフォルダの場所を移動すると、テストプロジェクトの参照設定などを
再度設定しなおさないといけないようだ。
2013年6月5日水曜日
ソニー 電子ペーパー
先月の教育EXPOなる展示会で、ソニーが出展していた電子ペーパーに驚いた。
非常に使い勝手がよさそうで、ノートに取って代わりそうな予感。
いくつかの大学で 実証実験をおこなうそうだ。
動画でみられるので、一度閲覧することをおすすめします。
1枚いくらするのだろう。
非常に使い勝手がよさそうで、ノートに取って代わりそうな予感。
いくつかの大学で 実証実験をおこなうそうだ。
動画でみられるので、一度閲覧することをおすすめします。
1枚いくらするのだろう。
2013年6月4日火曜日
Oracle 複合インデックスが利用されない
複数のカラムを指定してインデックスを作ることができる。
col1
col2
col3
を利用したインデックスを作成したとして、
where col2 = xxx
としてもこのインデックスを利用してくれない。
where col1 = xxx and col2 = yyy
のようにする必要がある。
col1
col2
col3
を利用したインデックスを作成したとして、
where col2 = xxx
としてもこのインデックスを利用してくれない。
where col1 = xxx and col2 = yyy
のようにする必要がある。
2013年5月13日月曜日
c# 文字列のContains
string の Containsメソッド は、空文字列は常にtrueを返すようなので注意する。
List などではfalse になるようだ。
イミディエイトウィンドウで確認した結果
string s = "";
""
s = "aaaaaaaa";
"aaaaaaaa"
s.Contains("b");
false
s.Contains("a");
true
s.Contains("");
true
(↑ 空文字列でtrueを返している)
List などではfalse になるようだ。
イミディエイトウィンドウで確認した結果
string s = "";
""
s = "aaaaaaaa";
"aaaaaaaa"
s.Contains("b");
false
s.Contains("a");
true
s.Contains("");
true
(↑ 空文字列でtrueを返している)
2013年5月7日火曜日
thunderbird で宛名を自動的に入れるには
宛名を自動的に入れるというか、各項目の変数を挿入する機能があった。
QuickText というアドオンでできる。
「ツール」の「QuickText」からテンプレートを作成でき、これを利用する。
テンプレート作成画面に「タグ」がある。
このタグの中に、 宛先や差し出し人の項目があり、クリックすると変数らしいテキストが
入る。例えば宛先の表示名を選ぶと
[[TO=displayname]]
が入る。
テンプレートを保存する。
メール作成画面で保存したテンプレートを選ぶと、アドレス帳に入っているメールの表示名
が挿入できる。
QuickText というアドオンでできる。
「ツール」の「QuickText」からテンプレートを作成でき、これを利用する。
テンプレート作成画面に「タグ」がある。
このタグの中に、 宛先や差し出し人の項目があり、クリックすると変数らしいテキストが
入る。例えば宛先の表示名を選ぶと
[[TO=displayname]]
が入る。
テンプレートを保存する。
メール作成画面で保存したテンプレートを選ぶと、アドレス帳に入っているメールの表示名
が挿入できる。
2013年5月2日木曜日
Oracle のシーケンスが飛ぶ現象
シーケンスの cache_size がデフォルトで20になっており、
これが原因で飛ぶことがあるらしい。
実験してみると、last_number の値に到達すると、 20ずつ増える。
いくつかセッションを作って試してみたが、再現したりしなかったりであった。
一度削除してつくりなおす必要がある。
drop sequence seq_test;
create sequence seq_test start with 1000 nocache order;
これが原因で飛ぶことがあるらしい。
実験してみると、last_number の値に到達すると、 20ずつ増える。
いくつかセッションを作って試してみたが、再現したりしなかったりであった。
一度削除してつくりなおす必要がある。
drop sequence seq_test;
create sequence seq_test start with 1000 nocache order;
2013年4月17日水曜日
単体テスト
Visual Studio で簡単に単体テストを書ける。
テストしたいメソッド上で右クリック「単体テストの作成」でスケルトンのコードが
できるので、必要な箇所を記述すればよい。
1度書いておけば、何度でも繰り返し実行できるので便利である。
通常のクラスだけでなく、フォームもテストできるようだ。
フォームのメソッドに対して単体テストを作成すると
Form1_Accessor target = Form1_Accessor new ();
のようなコードを生成してくれる。
これにより、フォームの private な要素にもアクセスできるようになり
GUIのテストもある程度コードで書ける。
ところが、いろいろとエラーが出たのでまとめておく。
・名前空間とクラス名が同じとき
Class1.Class1 のように .Class1 を足さないとエラーになる。
・テストを生成するときに次のエラーが発生しました 値を null にすることはできません。
のようなエラーがでる。
フォームのメソッドに対して右クリック「単体テストの作成」を実行すると
結構な確立でお目にかかった。
原因はよくわからないが、新しく空のフォームを作成して、そこで
単体テストを作成すれば一応回避可能である。
Form1で上記のエラーが発生し、新たにForm2を作成したとする。
すると
Form2_Accessor target = Form2_Accessor new ();
のようなコードを作成できるので、Form2→Form1とすればテスト可能のようである。
Form1_Accessor target = Form1_Accessor new ();
テストしたいメソッド上で右クリック「単体テストの作成」でスケルトンのコードが
できるので、必要な箇所を記述すればよい。
1度書いておけば、何度でも繰り返し実行できるので便利である。
通常のクラスだけでなく、フォームもテストできるようだ。
フォームのメソッドに対して単体テストを作成すると
Form1_Accessor target = Form1_Accessor new ();
のようなコードを生成してくれる。
これにより、フォームの private な要素にもアクセスできるようになり
GUIのテストもある程度コードで書ける。
ところが、いろいろとエラーが出たのでまとめておく。
・名前空間とクラス名が同じとき
Class1.Class1 のように .Class1 を足さないとエラーになる。
・テストを生成するときに次のエラーが発生しました 値を null にすることはできません。
のようなエラーがでる。
フォームのメソッドに対して右クリック「単体テストの作成」を実行すると
結構な確立でお目にかかった。
原因はよくわからないが、新しく空のフォームを作成して、そこで
単体テストを作成すれば一応回避可能である。
Form1で上記のエラーが発生し、新たにForm2を作成したとする。
すると
Form2_Accessor target = Form2_Accessor new ();
のようなコードを作成できるので、Form2→Form1とすればテスト可能のようである。
Form1_Accessor target = Form1_Accessor new ();
2013年4月15日月曜日
3Dプリンタ
NHKのサイエンスゼロという番組で、3Dプリンタを特集していた。
20万円くらい?から販売されているようで、個人にも手がとどくレベルになってきたとの
ことである。
・試作品を迅速に作成できる。
・多品種少量生産に役立つ。
・臓器の形を再現し、手術のシュミレーションができる。
・電子回路を印刷で作成し、パソコンを「印刷」できる。
・科学、物理で知られている理想的な形状を作ることができる。
これまでの切削などの技術ではできなかったこと。
iPhoneのケースくらいなら、市販品の質には及ばないが支障のないものが
作れるらしい。
人を3Dスキャナで読み込んで、そっくりな型を作って、グミを作っていた。
アイデアしだいでいろいろできそうである。
「印刷」するための設計データが必要になる。
一方で、問題もある。
20万円くらい?から販売されているようで、個人にも手がとどくレベルになってきたとの
ことである。
・試作品を迅速に作成できる。
・多品種少量生産に役立つ。
・臓器の形を再現し、手術のシュミレーションができる。
・電子回路を印刷で作成し、パソコンを「印刷」できる。
・科学、物理で知られている理想的な形状を作ることができる。
これまでの切削などの技術ではできなかったこと。
iPhoneのケースくらいなら、市販品の質には及ばないが支障のないものが
作れるらしい。
人を3Dスキャナで読み込んで、そっくりな型を作って、グミを作っていた。
アイデアしだいでいろいろできそうである。
「印刷」するための設計データが必要になる。
一方で、問題もある。
専門用語の抽出
r と MeCab により、頻出語をしらべようと思った。
ところが、ごく一般的な単語のみ抽出されてしまい、特定分野固有の用語の
頻出度がわからなかった。
そこで、よい方法はないか調べていたが、
termmi
というツール?を入れることで可能のようだったので、試してみた。
<termmi のインストール>
Active Perl
ppm install File::MMagic
MeCab
TermExtract "win_install.pl"を実行
termmi "Configure.pl"
IMP_M.BAT へのショートカットを作成し、そこにファイルをドラッグする。
ところがエラーが出る。
<termmi のエラー>
エラー1
Can not open tmp.txt/ at ./termmi.pl line 116.
・次のように修正した。
# ディレクトリ中のテキストファイル一覧を得る
sub get_text_file {
my $dir = shift; # 処理対象ディレクトリ
[追加→] $dir = 'c:\termmi'; # なぜかエラーになるため
$dir .= '/'; # Shift-JIS対策
エラー2
c:\termmi>perl -w mi_mecab.pl tmp.txt
Cleaning working directory
Execute MeCab now
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
output indivisual document score
output total document score
output common terms
output unique terms
(この状態だとoutput などのフォルダはできるものの、
結果が入っていない。)
・次のように修正した。
# 「和布蕪」を実行
sub exec_mecab {
my $dir = shift;
my $file = shift;
[追加→] $dir = 'c:\termmi'; # なぜかエラーになるため
[追加→] $dir .= '/'; # Shift-JIS対策
ところが、ごく一般的な単語のみ抽出されてしまい、特定分野固有の用語の
頻出度がわからなかった。
そこで、よい方法はないか調べていたが、
termmi
というツール?を入れることで可能のようだったので、試してみた。
<termmi のインストール>
Active Perl
ppm install File::MMagic
MeCab
TermExtract "win_install.pl"を実行
termmi "Configure.pl"
IMP_M.BAT へのショートカットを作成し、そこにファイルをドラッグする。
ところがエラーが出る。
<termmi のエラー>
エラー1
Can not open tmp.txt/ at ./termmi.pl line 116.
・次のように修正した。
# ディレクトリ中のテキストファイル一覧を得る
sub get_text_file {
my $dir = shift; # 処理対象ディレクトリ
[追加→] $dir = 'c:\termmi'; # なぜかエラーになるため
$dir .= '/'; # Shift-JIS対策
エラー2
c:\termmi>perl -w mi_mecab.pl tmp.txt
Cleaning working directory
Execute MeCab now
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
output indivisual document score
output total document score
output common terms
output unique terms
(この状態だとoutput などのフォルダはできるものの、
結果が入っていない。)
・次のように修正した。
# 「和布蕪」を実行
sub exec_mecab {
my $dir = shift;
my $file = shift;
[追加→] $dir = 'c:\termmi'; # なぜかエラーになるため
[追加→] $dir .= '/'; # Shift-JIS対策
2013年4月12日金曜日
r テキストマイニング
r と MeCab でどこまでのテキストマイニングができるのかを調査中。
まずは単語の出現回数をしらべてみた。
次のようなスクリプトで確認できた。
library(RMeCab) #起動のたびに必要?
txres <- RMeCabFreq("tmp.txt")
#降順にならべかえ
df <- txres[sort.list(txres$Freq , decreasing=TRUE),]
#5回以上出現、名詞のみ
df[df$Freq >= 5 & df$Info1 == "名詞", ]
#ファイル保存(カンマ区切りではない)
write.table(df, "output.txt", quote=F, col.names=T, append=F)
まずは単語の出現回数をしらべてみた。
次のようなスクリプトで確認できた。
library(RMeCab) #起動のたびに必要?
txres <- RMeCabFreq("tmp.txt")
#降順にならべかえ
df <- txres[sort.list(txres$Freq , decreasing=TRUE),]
#5回以上出現、名詞のみ
df[df$Freq >= 5 & df$Info1 == "名詞", ]
#ファイル保存(カンマ区切りではない)
write.table(df, "output.txt", quote=F, col.names=T, append=F)
2013年4月10日水曜日
Oracleクライアント バージョン切り替え
複数バージョンのoracleクライアントが共存している場合の切り替え方法
スタートメニューからUniversal Installer を起動する。
「インストールされた製品」→「環境」にて、
使用するバージョンを一番上に移動する。
スタートメニューからUniversal Installer を起動する。
「インストールされた製品」→「環境」にて、
使用するバージョンを一番上に移動する。
インストールの自動化
インストール作業を逐一行うは非常に面倒な作業であるため、
可能な限り、自動化しておきたいものである。
MDT 2010 などというツールはOSのインストールやアプリケーションの配布に
有用なようだ。
アプリケーションの配布についてはサイレントインストールが必要なようなので、
こちらについても確認したい。
可能な限り、自動化しておきたいものである。
MDT 2010 などというツールはOSのインストールやアプリケーションの配布に
有用なようだ。
アプリケーションの配布についてはサイレントインストールが必要なようなので、
こちらについても確認したい。
Oracle DB作成 サイレントインストール
DBCAを利用すれば簡単に作成できるが、何度も繰り返すには面倒なので、
サイレントインストールについて調べた。
DBCAが吐き出すスクリプトを利用することにした。作成方法が簡単であるため。
(DBCAの最後の方にある、「スクリプトを作成する」チェックを入れると作ってくれる)
吐き出された中の、「DB名」.bat を実行するとパスワードは手で入力する必要があるものの
これだけでデータベース作成ができる。
とりあえず当面はこれを利用することにする。
(ACCEPTS sysPassword を Def sysPassword=xxxx にしただけでは、sysのパスワードが聞かれ、完全に自動化できなかった。機会があれば調べたい)
追加したい処理は「DB名」.sql に追加する等で対応できる。
サイレントインストールについて調べた。
DBCAが吐き出すスクリプトを利用することにした。作成方法が簡単であるため。
(DBCAの最後の方にある、「スクリプトを作成する」チェックを入れると作ってくれる)
吐き出された中の、「DB名」.bat を実行するとパスワードは手で入力する必要があるものの
これだけでデータベース作成ができる。
とりあえず当面はこれを利用することにする。
(ACCEPTS sysPassword を Def sysPassword=xxxx にしただけでは、sysのパスワードが聞かれ、完全に自動化できなかった。機会があれば調べたい)
追加したい処理は「DB名」.sql に追加する等で対応できる。
Oracle インストール自動化
Oracle データベース のインストールを自動化しようと思い、
サイレントインストールについて調べた。
UWSCのような自動操作してくれるツールでやろうかと思ったがうまくいかなかったので、
oui の setup.exe でレスポンスファイルを使用する方法を調べた。
setup.exe -responseFile d:\db.rsp -silent
などとする。
db.rspがレスポンスファイルである。絶対パスで指定すること。
このファイルは、一度 oui の setup.exe を通常通り実行し、最後のほうで
「レスポンスファイルの保存」すると作成できる。
意外と簡単だった。
(-silent を外すと、GUIが立ち上がり、設定が確認できる。)
サイレントインストールについて調べた。
UWSCのような自動操作してくれるツールでやろうかと思ったがうまくいかなかったので、
oui の setup.exe でレスポンスファイルを使用する方法を調べた。
setup.exe -responseFile d:\db.rsp -silent
などとする。
db.rspがレスポンスファイルである。絶対パスで指定すること。
このファイルは、一度 oui の setup.exe を通常通り実行し、最後のほうで
「レスポンスファイルの保存」すると作成できる。
意外と簡単だった。
(-silent を外すと、GUIが立ち上がり、設定が確認できる。)
2013年4月6日土曜日
凝集度 結合度
わかりやすい、回収しやすいシステム、プログラムを開発するときに
「凝集度」や「結合度」に留意する。
できるだけ単一の機能(責任)にわけて実装する。
機能的凝集度をめざす。
そして、できるだけ結合を疎にする。関数にはデータ、または構造体を渡すようにする。
条件により動作が変わるようなパラメータは極力さける。(避けられないときもある)
データ結合、スタンプ結合を心がける。
「凝集度」や「結合度」に留意する。
できるだけ単一の機能(責任)にわけて実装する。
機能的凝集度をめざす。
そして、できるだけ結合を疎にする。関数にはデータ、または構造体を渡すようにする。
条件により動作が変わるようなパラメータは極力さける。(避けられないときもある)
データ結合、スタンプ結合を心がける。
2013年4月5日金曜日
2013年4月2日火曜日
join の種類
join の種類
ネスト・ループ結合 二重ループを回してテーブルを結合する
マージ結合 二つのテーブルを、結合するフィールドについてあらかじめソートし、一致するものを探す
ハッシュ結合 ネスト・ループ結合で全件走査している検索処理の部分にハッシュ法を使うことで高速化を図る
http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227102/
ネスト・ループ結合 二重ループを回してテーブルを結合する
マージ結合 二つのテーブルを、結合するフィールドについてあらかじめソートし、一致するものを探す
ハッシュ結合 ネスト・ループ結合で全件走査している検索処理の部分にハッシュ法を使うことで高速化を図る
http://itpro.nikkeibp.co.jp/article/COLUMN/20060111/227102/
ドライブ文字の変更
ハードディスク、DVDなどのドライブ文字の変更
コンピュータの管理→ディスクの管理
画面右下にCD-ROM 0 などとなっているので、ここを右クリック、ドライブ文字とパスの変更から変更できる。
コンピュータの管理→ディスクの管理
画面右下にCD-ROM 0 などとなっているので、ここを右クリック、ドライブ文字とパスの変更から変更できる。
ドラッカー 成果と貢献
ドラッカー 「プロフェッショナルの条件」
インダストリアル・エンジニアリングは、肉体労働の効率化には役立つが、
知識労働者には役にたたない。
優れた知識を持つものはまれである。豊富にいるのはそうでないものである。
たった一つ優れた専門分野の知識を
活かすように組織に配置するよりない。
成果を上げる上で最も重要な人間は直接の部下ではない。他の分野のひと、組織図上では横の関係にあるものである。あるいは上司である。それらの人に自分の貢献を利用して
もらい成果に結びつくようにしなければ、いかなる成果もあげられない。
知識は成果の上限を決めるのみであり、成果を上げる方法を知らねばならない。
これは1つの習慣である。
(どのような習慣か、について述べている?)
自らの成果を他人がどう利用するか。自らのやっていることを他人がわかるように。
貢献
「組織の成果に影響を与える貢献とは何か」
←→ 権限 「私は経理部長をしています。」
インダストリアル・エンジニアリングは、肉体労働の効率化には役立つが、
知識労働者には役にたたない。
優れた知識を持つものはまれである。豊富にいるのはそうでないものである。
たった一つ優れた専門分野の知識を
活かすように組織に配置するよりない。
成果を上げる上で最も重要な人間は直接の部下ではない。他の分野のひと、組織図上では横の関係にあるものである。あるいは上司である。それらの人に自分の貢献を利用して
もらい成果に結びつくようにしなければ、いかなる成果もあげられない。
知識は成果の上限を決めるのみであり、成果を上げる方法を知らねばならない。
これは1つの習慣である。
(どのような習慣か、について述べている?)
自らの成果を他人がどう利用するか。自らのやっていることを他人がわかるように。
貢献
「組織の成果に影響を与える貢献とは何か」
←→ 権限 「私は経理部長をしています。」
2013年4月1日月曜日
Windows Server 2008 パスワード要件
Windows Server 2008 パスワード要件 の変更方法
デフォルトだと、単純なパスワードだとはじかれるので、それを回避する。
管理ツール→ローカルセキュリティポリシー→アカウントポリシー→パスワードポリシー
で必要な項目を変更する。
デフォルトだと、単純なパスワードだとはじかれるので、それを回避する。
管理ツール→ローカルセキュリティポリシー→アカウントポリシー→パスワードポリシー
で必要な項目を変更する。
ドラッカー 自己の強みとフィードバック分析
ドラッカー 「プロフェッショナルの条件」
強み、仕事の仕方、価値観の3つの問題に答えをだす。
「プロフェッショナルの条件」によると、自己の強みを知る唯一の方法は、フィードバック分析である。
自分の強みは何か、と聞かれて明確に答えられるだろうか。
たいていは間違っている、と氏は言っている。
自分の強みを知らねばならない。
「何かをすることに決めたならば、何を期待するかをただちに書き留めておく。9ヶ月後、
1年後に、その期待と実際の結果を照合する。」
「2,3年のうちに自らの強みが明らかになる。」
そして明らかになった強みに集中する。
他にも、専門知識の軽視、悪癖、人への接し方、成果のあがらないことは行わない、
などに対し、良い啓発を与えてくれる。
いかなる仕事の仕方をするのかは、強みと同様に大切であり、不得手とする仕事の仕方も
明らかにする。読む人間か、聞く人間か。
(所感 自分でも組織でも、振り返る習慣がなかなかないことに気いた。
逐一記録していないとあとで、冷静、客観的に振り返ることも困難だと思う。
強みを活かす、強みに集中する前に、まず正確に強みを知らないという指摘がある。
仕事の仕方が漠然としていることを反省している。
)
強み、仕事の仕方、価値観の3つの問題に答えをだす。
「プロフェッショナルの条件」によると、自己の強みを知る唯一の方法は、フィードバック分析である。
自分の強みは何か、と聞かれて明確に答えられるだろうか。
たいていは間違っている、と氏は言っている。
自分の強みを知らねばならない。
「何かをすることに決めたならば、何を期待するかをただちに書き留めておく。9ヶ月後、
1年後に、その期待と実際の結果を照合する。」
「2,3年のうちに自らの強みが明らかになる。」
そして明らかになった強みに集中する。
他にも、専門知識の軽視、悪癖、人への接し方、成果のあがらないことは行わない、
などに対し、良い啓発を与えてくれる。
いかなる仕事の仕方をするのかは、強みと同様に大切であり、不得手とする仕事の仕方も
明らかにする。読む人間か、聞く人間か。
(所感 自分でも組織でも、振り返る習慣がなかなかないことに気いた。
逐一記録していないとあとで、冷静、客観的に振り返ることも困難だと思う。
強みを活かす、強みに集中する前に、まず正確に強みを知らないという指摘がある。
仕事の仕方が漠然としていることを反省している。
)
2013年3月30日土曜日
SMS Eメール 違い
SMSとEメールの違いについて、適当メモ
SMS 従来は同一キャリアでしか使用できなかったが、主要なキャリア間で使用可能になった。電話番号で宛先を指定してメッセージをやり取りできる。
MMS SMSが拡張されたもの。 @softbank.ne.jpが該当
Eメール @i.softbank.jp
ソフトバンクに限ると
Eメール = S!メール = MMS
らしい。
SMS 従来は同一キャリアでしか使用できなかったが、主要なキャリア間で使用可能になった。電話番号で宛先を指定してメッセージをやり取りできる。
MMS SMSが拡張されたもの。 @softbank.ne.jpが該当
Eメール @i.softbank.jp
ソフトバンクに限ると
Eメール = S!メール = MMS
らしい。
2013年3月29日金曜日
ドラッカー 難しい?
継続して成長するためにはどうすればよいか?という疑問を抱えていたときに、
ドラッカーの「プロフェッショナルの条件」を読んだ。
以前にもドラッカーの著作は少し読んだことがあり、ドラッカーは難しい、難解と感じていた。
しかし、たとえば「自己の成長」のようなテーマ、
問題意識を持って「プロフェッショナルの条件」を読んだところ、わかりやすいと感じた。
以下に、印象深く感じた箇所を一部抜粋しておく。(途中)
産業革命の本質 百科全書
技能に関するあらゆる知識をまとめ、徒弟にならなくとも技能技術者になれることを目指していた。
経験 →知識
徒弟制 →教科書
秘伝 →方法論
作業 →知識
資本主義
既存の知識をいかに有効に適用するかを知るための知識がマネジメントである。
知識が資源の中心になる → ポスト資本主義
土地、資本、労働は制約条件でしかない。
知識は、一般知識から専門知識へ重心を移行している
「変化のための仕組みを持つ」
ドラッカーの「プロフェッショナルの条件」を読んだ。
以前にもドラッカーの著作は少し読んだことがあり、ドラッカーは難しい、難解と感じていた。
しかし、たとえば「自己の成長」のようなテーマ、
問題意識を持って「プロフェッショナルの条件」を読んだところ、わかりやすいと感じた。
以下に、印象深く感じた箇所を一部抜粋しておく。(途中)
産業革命の本質 百科全書
技能に関するあらゆる知識をまとめ、徒弟にならなくとも技能技術者になれることを目指していた。
経験 →知識
徒弟制 →教科書
秘伝 →方法論
作業 →知識
資本主義
既存の知識をいかに有効に適用するかを知るための知識がマネジメントである。
知識が資源の中心になる → ポスト資本主義
土地、資本、労働は制約条件でしかない。
知識は、一般知識から専門知識へ重心を移行している
「変化のための仕組みを持つ」
シェルスクリプト バッチファイル 引数
リナックスのシェルスクリプトとWindowsのバッチファイルでの
引数の使い方。よく忘れるのでメモしておく。
linuxコマンド
./script a1 a2
スクリプト内での参照方法
$1
$2
Windowsコマンド
batfile.bat a1 a2
バッチファイル内での参照方法
%1
%2
引数の使い方。よく忘れるのでメモしておく。
linuxコマンド
./script a1 a2
スクリプト内での参照方法
$1
$2
Windowsコマンド
batfile.bat a1 a2
バッチファイル内での参照方法
%1
%2
2013年3月26日火曜日
リファクタリング
マーチン・ファウラーの「リファクタリング」を読んだことで
ソースコードを書くスタイルが随分と変わったように思う。
多くのサンプルコードを上げてリファクタリングの過程を示しておりわかりやすい。
コメントを書かなくても、ソースコード自体がコメントとなるような記述が理想的である。
そのようにコードを書くことを学んだ。
また、重複したコードがあればメソッドに抽出することを検討すべき、
などのアドバイスも具体的でわかりやすい。
リファクタリングとは「外部の振る舞いは変更せず、内部の構造を変更する」ことであるが、
自ずと綺麗なコードを書くことにつながる。
ソースコードを書くスタイルが随分と変わったように思う。
多くのサンプルコードを上げてリファクタリングの過程を示しておりわかりやすい。
コメントを書かなくても、ソースコード自体がコメントとなるような記述が理想的である。
そのようにコードを書くことを学んだ。
また、重複したコードがあればメソッドに抽出することを検討すべき、
などのアドバイスも具体的でわかりやすい。
リファクタリングとは「外部の振る舞いは変更せず、内部の構造を変更する」ことであるが、
自ずと綺麗なコードを書くことにつながる。
2013年3月11日月曜日
負荷調査
システムが遅くなってくると、苦情として上がってくる。
経験的に、ある水準を超えると指数関数的に遅くなるようだ。
こちらが知りたいことは、いつ、どんな操作をしたときに、どのくらい遅いのか、
といった内容だが、上がってくるのは「なんか遅い」、という漠然としたものである。
致し方ない。
データベースアプリケーションの場合、ボトルネックとなる多くは
データベース周りであろう。
そこで、その調査方法をメモしておく。
・遅いSQLを特定
アプリケーションを操作して特定する。
v$sql などのビューから負荷をかけているSQLを割り出す
・実行計画を確認
explain plan 、各種ツールによりSQLを実行し、確認する
・SQLの見直し、インデックスの調整
キャッシュサイズを増やす。
ハードを増強する。
不要なデータを取得しているならば見直す。
必要に応じて、適切なインデックスを追加する。
(データを削除する。)
経験的に、ある水準を超えると指数関数的に遅くなるようだ。
こちらが知りたいことは、いつ、どんな操作をしたときに、どのくらい遅いのか、
といった内容だが、上がってくるのは「なんか遅い」、という漠然としたものである。
致し方ない。
データベースアプリケーションの場合、ボトルネックとなる多くは
データベース周りであろう。
そこで、その調査方法をメモしておく。
・遅いSQLを特定
アプリケーションを操作して特定する。
v$sql などのビューから負荷をかけているSQLを割り出す
・実行計画を確認
explain plan 、各種ツールによりSQLを実行し、確認する
・SQLの見直し、インデックスの調整
キャッシュサイズを増やす。
ハードを増強する。
不要なデータを取得しているならば見直す。
必要に応じて、適切なインデックスを追加する。
(データを削除する。)
Oracle11g 注意点
Oracle11g データベース構築の注意点
・インストール
setup.exe
・リスナーのインストール
NetCAを起動する。
予め動作確認をしておいたlistener.ora をコピーする。
(ここがややこしい。)
必要であればファイアーウォールを通れるようにする。
※調査にはlsnrctl コマンドを使う。
lsnrctl status /start / stop /reload [リスナー]
・データベースのインストール
DBCAを起動する。
・表領域、ユーザー、テーブル作成、データのインポート等
・バックアップ
・必要に応じて
パスワードの有効期限が決まっているので解除する。
(デフォルトでは180日?また、一定回数間違えるとロックアウトする。)
password_life_time unlimited など
パスワードの大文字小文字の区別をしないように解除する。
sec_case_sensitive_logon = false
・アンインストール
deinstall
(ディレクトリが一部残る。手動で削除。
再起動しないと削除できないかも)
※環境の検証などのため、何度もインストール、DB構築、などを繰り返す場合は、
インストールの自動化を検討するとよいかもしれない。別記事参照
・インストール
setup.exe
・リスナーのインストール
NetCAを起動する。
予め動作確認をしておいたlistener.ora をコピーする。
(ここがややこしい。)
必要であればファイアーウォールを通れるようにする。
※調査にはlsnrctl コマンドを使う。
lsnrctl status /start / stop /reload [リスナー]
・データベースのインストール
DBCAを起動する。
・表領域、ユーザー、テーブル作成、データのインポート等
・バックアップ
・必要に応じて
パスワードの有効期限が決まっているので解除する。
(デフォルトでは180日?また、一定回数間違えるとロックアウトする。)
password_life_time unlimited など
パスワードの大文字小文字の区別をしないように解除する。
sec_case_sensitive_logon = false
・アンインストール
deinstall
(ディレクトリが一部残る。手動で削除。
再起動しないと削除できないかも)
※環境の検証などのため、何度もインストール、DB構築、などを繰り返す場合は、
インストールの自動化を検討するとよいかもしれない。別記事参照
Oracle エンタープライズマネジャー
Oracle11gでは、エンタープライズマネジャーがWEBベースになった。
(10でも?)
インストール後にサーバーのIPアドレスを変更すると、エンタープライズマネジャーが使えなくなる。
その後いろいろいじっても改善できず、データベースごと再構築して使えるようになった。
よくわからん。
Oracleデータベースの構築はややこしい。
(10でも?)
インストール後にサーバーのIPアドレスを変更すると、エンタープライズマネジャーが使えなくなる。
その後いろいろいじっても改善できず、データベースごと再構築して使えるようになった。
よくわからん。
Oracleデータベースの構築はややこしい。
Oracle キャッシュのクリア
Oracle10g 移行、キャッシュをクリアするのに、再起動しなくてもよくなった。
・共有プールのクリア
ALTER SYSTEM FLUSH SHARED_POOL;
・バッファキャッシュのクリア
ALTER SYSTEM FLUSH BUFFER_CACHE ;
キャッシュ有無のパフォーマンスチェックがらくになった。
・共有プールのクリア
ALTER SYSTEM FLUSH SHARED_POOL;
・バッファキャッシュのクリア
ALTER SYSTEM FLUSH BUFFER_CACHE ;
キャッシュ有無のパフォーマンスチェックがらくになった。
2013年3月10日日曜日
2013年3月6日水曜日
USB制御
Windows でのUSB制御について
Microsoft のサイトにある devcon.exe を使用すると便利である。
devcon disable "シリアル値"
devcon enable "シリアル値"
シリアル値はWMIを使って取得すると便利である。
WMICodeCreator.exeをつかう。
あとはWindows API でUSB着脱のイベントを検知する。
Microsoft のサイトにある devcon.exe を使用すると便利である。
devcon disable "シリアル値"
devcon enable "シリアル値"
シリアル値はWMIを使って取得すると便利である。
WMICodeCreator.exeをつかう。
あとはWindows API でUSB着脱のイベントを検知する。
vmware サーバー移行 Vmware Converter
サーバーが古くなってきたので、ハードだけ新しいものに
したい場合がある。
vmware converter を使えば、まるごと移行できて便利である。
したい場合がある。
vmware converter を使えば、まるごと移行できて便利である。
Linux 遅い
Linux 遅いとき
top コマンドの右上の方に
「Load Average 」
という項目があるので、これを確認する。
これは、処理待ちのプロセス数の平均を示しており、
数が増えるほど体感速度が遅く感じる。
個人的な感覚だが、2、3くらいになってくるとだんだん遅く感じ、
それ以上だと、これは明らかに遅く異常だと感じる。
できれば1以下に保っておきたいところである。
その時に動作しているプロセスを確認すれば、どのプログラムが原因か
ある程度判断できる。
top コマンドの右上の方に
「Load Average 」
という項目があるので、これを確認する。
これは、処理待ちのプロセス数の平均を示しており、
数が増えるほど体感速度が遅く感じる。
個人的な感覚だが、2、3くらいになってくるとだんだん遅く感じ、
それ以上だと、これは明らかに遅く異常だと感じる。
できれば1以下に保っておきたいところである。
その時に動作しているプロセスを確認すれば、どのプログラムが原因か
ある程度判断できる。
Android USBホスト機能
Android 端末でUSBキーボードを使おうとした。
・端末が「USBホスト機能」を有している
・対応したケーブルを使う
ことが必要らしい。
自分の端末は「USBホスト機能」に対応していないためか
うまくいかなかった。
おとなしくBlue Tooth にするか。
・端末が「USBホスト機能」を有している
・対応したケーブルを使う
ことが必要らしい。
自分の端末は「USBホスト機能」に対応していないためか
うまくいかなかった。
おとなしくBlue Tooth にするか。
C# 集計処理
C#で集計するには
DataTable の Compute メソッドが便利である。
DataTable table = new DataTable();
table.Compute("Sum(値)", "種類 = 商品");
Sum,AVG,MIN,MAX,Var(分散)、StDev(標準偏差)が使える。
DataTable の Compute メソッドが便利である。
DataTable table = new DataTable();
table.Compute("Sum(値)", "種類 = 商品");
Sum,AVG,MIN,MAX,Var(分散)、StDev(標準偏差)が使える。
Oracle 遅い
長らくつかっていると、システムのレスポンスが低下してくる。
やはりデータベース周りが疑われることが多いだろう。
たとえば
・データが増えてきた
→削除できるなら削除する
・適切なインデックスを使用していない
→SQLを調査する。
SQLトレース
explain plan コマンド
・メモリが足りない →db_cache サイズを増やす
特定のテーブルはメモリに置く
やはりデータベース周りが疑われることが多いだろう。
たとえば
・データが増えてきた
→削除できるなら削除する
・適切なインデックスを使用していない
→SQLを調査する。
SQLトレース
explain plan コマンド
・メモリが足りない →db_cache サイズを増やす
特定のテーブルはメモリに置く
Oracle セッション数が足りない
Oracleは接続するためのセッションが足りなくなることがある。
どうすればよいのか。
接続の方法として
・専用サーバー接続
・共有サーバー接続
とある。
専用サーバー接続は要求があるたびにセッションをつくるが、
共有サーバー接続は、これを使いまわすため、セッション数を稼ぐ
ことができる。
どうすればよいのか。
接続の方法として
・専用サーバー接続
・共有サーバー接続
とある。
専用サーバー接続は要求があるたびにセッションをつくるが、
共有サーバー接続は、これを使いまわすため、セッション数を稼ぐ
ことができる。
2013年3月5日火曜日
ソースコード
システムに不具合があってもベンダーがろくに対応して
くれない場合がある。
せめてソースコード くらいあれば調査でそうなものである。
ソースコードを開示するように契約上盛り込めればよいのだが、
そう簡単にはいかないだろう。
リスク回避の策を考えていく必要がある。
くれない場合がある。
せめてソースコード くらいあれば調査でそうなものである。
ソースコードを開示するように契約上盛り込めればよいのだが、
そう簡単にはいかないだろう。
リスク回避の策を考えていく必要がある。
2013年3月4日月曜日
プログラムのテンプレート
システム開発にあたって、誰が見てもわかりやすい、メンテナンスしやすい
という要素は大事ですが、各人まかせという場合も多々あると思います。
プログラムのテンプレートを用意して、大枠はそこから外れないように
しつつ、ある程度の自由は認めてあげる、というのが良いのではないかと思う。
ある程度人員や時間が確保できる組織ならば
しっかりと標準化に取り組めるかもしれないが、リソースの限られている
われわれに簡単にできるのはこのくらいでは。
という要素は大事ですが、各人まかせという場合も多々あると思います。
プログラムのテンプレートを用意して、大枠はそこから外れないように
しつつ、ある程度の自由は認めてあげる、というのが良いのではないかと思う。
ある程度人員や時間が確保できる組織ならば
しっかりと標準化に取り組めるかもしれないが、リソースの限られている
われわれに簡単にできるのはこのくらいでは。
windows7以降 administrator
windows7やwindows8では、デフォルトでadministratorが使えない。
コンピュータ→右クリック→管理→ローカルユーザー
にて有効にしてやる必要がある。
コンピュータ→右クリック→管理→ローカルユーザー
にて有効にしてやる必要がある。
oracle11gr2 クライアントを windows8 に入れてみた。
oracle11gr2 クライアントを windows8 に入れてみた。
setup.exe を走らすと、
「最低要件を満たしていません。」
→無視して続行したら入った。が、インストール方法を間違えた。
tnsnames.ora を置くための network フォルダがない。
setup.exe はきどうしなくなったので、
次はoui.exe を直接起動してセットアップした。
動作確認すると、.net のプログラムが動かなくなった。
retrieve text for error ora 01019 のようなエラーが出る。
client_1 , client_2 の2つが存在したためか。
環境変数path からclient_1を削除したら動くようになった。
setup.exe を走らすと、
「最低要件を満たしていません。」
→無視して続行したら入った。が、インストール方法を間違えた。
tnsnames.ora を置くための network フォルダがない。
setup.exe はきどうしなくなったので、
次はoui.exe を直接起動してセットアップした。
動作確認すると、.net のプログラムが動かなくなった。
retrieve text for error ora 01019 のようなエラーが出る。
client_1 , client_2 の2つが存在したためか。
環境変数path からclient_1を削除したら動くようになった。
2013年3月2日土曜日
李儒
董卓の知恵袋で李儒という人がいる。
董卓のような横暴なものに意見し、納得させるという意味では
学ぶ点があると思う。
横山光輝三国志によると
1国の主君たるもの、天下をとるためには寛容な態度も必要なこと、
許されないことを許し、それに恩義を感じより一層呂布は董卓のために
働くであろうこと、
董卓と呂布が組んでいるからこそ、うまくいっていること、
これらのことを訴えるために、「絶纓の会」という故事を出して
諌めている。
参考文献:三国志 ○巻 ○ページ
董卓のような横暴なものに意見し、納得させるという意味では
学ぶ点があると思う。
横山光輝三国志によると
1国の主君たるもの、天下をとるためには寛容な態度も必要なこと、
許されないことを許し、それに恩義を感じより一層呂布は董卓のために
働くであろうこと、
董卓と呂布が組んでいるからこそ、うまくいっていること、
これらのことを訴えるために、「絶纓の会」という故事を出して
諌めている。
参考文献:三国志 ○巻 ○ページ
FireFox OS
iPhone , Androidとは別のスマートフォン用OSに
FireFox OSが名乗りを上げたようです。
Firefox のアドオンから簡単にインストールできます。
Android がベースになっているようで、似たような操作感です。
iPhone , Androidの対抗馬になりうるのか、注目したいと思う。
FireFox OSが名乗りを上げたようです。
Firefox のアドオンから簡単にインストールできます。
Android がベースになっているようで、似たような操作感です。
iPhone , Androidの対抗馬になりうるのか、注目したいと思う。
2013年3月1日金曜日
2013年2月28日木曜日
アウトプット
学んだことについてアウトプットするのは大事なことだと思う。
本当は人に「これはこういうことなんだよ」と話が出来ればよいが、
聞きたくないこともあろうし、都合が合わないことも多い。
ぜひともアウトプットにこだわっていきたい。
記憶も強化されるし、考えをまとめることもできる。
皆が知りたい情報であれば 喜んでもらえる。
良い事づくめである。
本当は人に「これはこういうことなんだよ」と話が出来ればよいが、
聞きたくないこともあろうし、都合が合わないことも多い。
ぜひともアウトプットにこだわっていきたい。
記憶も強化されるし、考えをまとめることもできる。
皆が知りたい情報であれば 喜んでもらえる。
良い事づくめである。
2013年2月26日火曜日
プログラム開発 標準化
プログラムのつくりを統一しておかないと、作る方もメンテナンスするほうも大変である。
必要とは思いつつも、零細、小人数の体制ではしっかりとした開発標準のような
ものを検討する余裕がない社内SEさんも少なからずあると思う。
すでに存在しているものに作りを合わせるのが簡単である。
これをやっている人はよいのだが、まったく異なる仕組みで、同じ組織で仕事を
しているとは思えないつくりになる場合もあるから困る。
多少まずい作りであっても、ある程度統一された作りになっていれば救われる。
まったく異なると0からコードを解析しなければならない。
Visual Studioならば、サンプルとなるプロジェクトを用意して、これをテンプレート化し、
ここから大きくハズレないようにしてもらうなどの工夫が必要であろう。
あまり極端に作りが変わると、人によって生産性が何倍も変わってしまう。
他の人に引き継げない。
必要とは思いつつも、零細、小人数の体制ではしっかりとした開発標準のような
ものを検討する余裕がない社内SEさんも少なからずあると思う。
すでに存在しているものに作りを合わせるのが簡単である。
これをやっている人はよいのだが、まったく異なる仕組みで、同じ組織で仕事を
しているとは思えないつくりになる場合もあるから困る。
多少まずい作りであっても、ある程度統一された作りになっていれば救われる。
まったく異なると0からコードを解析しなければならない。
Visual Studioならば、サンプルとなるプロジェクトを用意して、これをテンプレート化し、
ここから大きくハズレないようにしてもらうなどの工夫が必要であろう。
あまり極端に作りが変わると、人によって生産性が何倍も変わってしまう。
他の人に引き継げない。
システム内製
システムを内製するかベンダー(業者)に依頼するか、という議論がある。
・ベンダーに頼んでもまともにつくってくれない
・遅い
・費用が高い
では内製すれば解決できるのか。
必ずしもそうは言えないと思う。
結局、内製するにしても外製するにしても、それなりのスキルも必要であるし
とくに重要なのは顧客、現場の目線に立てることだと思う。
(なんでもかんでも希望を取り入れてしまうのも問題であるが・・・)
その上で内製するメリットを考えてみると
・現場の要望にそって作りやすい
・早い
・費用は比較的少ない
(遅い人が作業すれば遅いし、当然その分の人件費を無駄にする)
・変更に対応しやすい
・ベンダーに頼んでもまともにつくってくれない
・遅い
・費用が高い
では内製すれば解決できるのか。
必ずしもそうは言えないと思う。
結局、内製するにしても外製するにしても、それなりのスキルも必要であるし
とくに重要なのは顧客、現場の目線に立てることだと思う。
(なんでもかんでも希望を取り入れてしまうのも問題であるが・・・)
その上で内製するメリットを考えてみると
・現場の要望にそって作りやすい
・早い
・費用は比較的少ない
(遅い人が作業すれば遅いし、当然その分の人件費を無駄にする)
・変更に対応しやすい
開発スタイル
システム開発
ちかごろXPなどのアジャイルな開発が流行っている。
特に、顧客のそばにいるわれわれ社内のSEにとっては親和性が高いように思う。
XPにはいくつかのプラクティスがある。
そのうち、取り入れられそうなものを使っている。
※必須と思うもの
○YAGNI(単純な設計)
○リファクタリング
とりわけ「単純な設計」が非常に重要であると思う。
その人しかわからないような新しい技術をつかいたがるひともあるが、
保守作業、小規模開発が多いわれわれ社内SEにはほぼ必要ない。
○頻繁なリリース
変化の早い時代、スピード感のあるリリースサイクルが重要だと感じる。
環境の変化に素早く対応するには、上記のように単純でわかりやすい
仕組みになっていることが必須と思う。
早くリリースすることで、要望とずれがあっても早期に修正できる。
※部分的に適用しているもの
△TDD
単純な処理や、データベースに出し入れするだけ、のような処理には
省略できるのではないか。
複雑なロジックをともなう処理、業務には有効だと思う。
△ペアプログラミング
他人のソースコードを確認することで、一定の効果があるように思う。
※今後検討したいもの
ミラー
「もっとも重要な情報は自然に視界に入るようにするのがベスト」
システム開発における見える化という事だが、各人まかせにすると
優先順位がおかしかったりする。
コンセプトをよく理解して、うまく取り入れれば非常によいと思う。
参考文献:エクストリーム・プログラミング入門 ケント・ベック著
ちかごろXPなどのアジャイルな開発が流行っている。
特に、顧客のそばにいるわれわれ社内のSEにとっては親和性が高いように思う。
XPにはいくつかのプラクティスがある。
そのうち、取り入れられそうなものを使っている。
※必須と思うもの
○YAGNI(単純な設計)
○リファクタリング
とりわけ「単純な設計」が非常に重要であると思う。
その人しかわからないような新しい技術をつかいたがるひともあるが、
保守作業、小規模開発が多いわれわれ社内SEにはほぼ必要ない。
○頻繁なリリース
変化の早い時代、スピード感のあるリリースサイクルが重要だと感じる。
環境の変化に素早く対応するには、上記のように単純でわかりやすい
仕組みになっていることが必須と思う。
早くリリースすることで、要望とずれがあっても早期に修正できる。
※部分的に適用しているもの
△TDD
単純な処理や、データベースに出し入れするだけ、のような処理には
省略できるのではないか。
複雑なロジックをともなう処理、業務には有効だと思う。
△ペアプログラミング
他人のソースコードを確認することで、一定の効果があるように思う。
※今後検討したいもの
ミラー
「もっとも重要な情報は自然に視界に入るようにするのがベスト」
システム開発における見える化という事だが、各人まかせにすると
優先順位がおかしかったりする。
コンセプトをよく理解して、うまく取り入れれば非常によいと思う。
参考文献:エクストリーム・プログラミング入門 ケント・ベック著
2013年2月25日月曜日
登録:
投稿 (Atom)