2013年8月29日木曜日

上流工程中心

転職エージェントからきたシステム開発者募集のメールに「上流工程中心」の文字。
ふと思うが、「上流工程」ってなんだ?なんでみんな「上流工程」をやりたがるんだ?

自分の認識での「上流工程」はウォーターフォール開発の初めの方、要件定義〜スケジュール策定〜基本設計。仕様を確定するフェーズか。

とりあえずググってみる。

http://e-words.jp/w/E4B88AE6B581E5B7A5E7A88B.html
ハードウェアソフトウェアシステムなどの開発設計における初期の段階のこと。おもに、対象物に求められる機能を抽出する「要件定義」や、実装される機能を定義する「機能定義」、設計物の構造を検討する「構成管理」、全工程のスケジュールを計画する「計画立案」などの工程を指す
 大体合ってるか。

端的に言えば「これから作るものを考えるフェーズ」であり「ものを作るフェーズ」じゃない。
作るものを考えるためには業務の理解が必要であり、システム開発の素養よりもビジネス面の素養のほうが重視されるフェーズだろう。
ITコンサル屋として仕事をするならこのフェーズに魅力を感じるのはよくわかるけど、システム屋として仕事をする上では正直うざったいフェーズだと思ってしまうんだよなぁ。
システム屋なんだからシステム作りたいだろう。

「下流」を経験した際にダメな「上流」のおかげでえらい目にあったから、じゃあ「上流」のほうが楽できるよね。ケツふかせる立場のほうがいいよね。という考えなのか。

単純に「上流」のほうが給与がよいからなのか。

もっと単純に、みんなが「上流がいい」って言ってるからなのか。

2013年3月27日水曜日

ダミーデータを作るSQL

OracleでDual表からダミー仮想表を作るSQLのサンプル


1. 面倒だけど柔軟なデータ
SELECT 'A' as KEYS , 100 as SUBKEY , 50 as VALUE from dual 
union all 
SELECT 'A' as KEYS , 200 as SUBKEY , 60 as VALUE from dual 
union all
...
--※SELECT...をコピペしまくる
結果:
KEYSSUBKEYVALUE
A10050
A20060


2. 連番が欲しい
select level as seq
from dual connect by level <= 3
--※level <= 3を適宜書き換え
結果:
SEQ
1
2
3


3. 連番じゃないけど順序性がありそげなデータが欲しい(CSVを列に変換)
select regexp_substr(txt, '[^,]+', 1, level) keys
from (select 'A,B,C' as txt
 from dual) connect by level <= 
 length(regexp_replace(txt, '[^,]')) + 1
--※'A,B,C'を適宜書き換え
結果:
SEQ
A
B
C


これらの組み合わせ(結合)で、とりあえず必要なデータパターンはだいたい網羅できると思う。

2011年5月22日日曜日

フラット化する世界 上

ITバブルで敷設されたインド・アメリカ間の光ファイバーにより、インドへのアウトソーシングが助長されたって話がおもしろかった。





2011年4月20日水曜日

Oracleヒント句超基本編

とりあえずこのぐらい気にしていればDBAに怒られないんじゃね?ってレベル


/**---- 最適化目標 ----**/
-- 全体最適
SELECT /*+ ALL_ROWS */ FROM DUAL;
-- 最初のn行に対して最適化
SELECT /*+ FIRST_ROWS (1) */ FROM DUAL;

/**---- アクセスパス ----**/
-- テーブル全体を走査
SELECT /*+ FULL(A) */ FROM DUAL A;

-- インデックスを利用して走査(PK_Aの部分はインデックス名)
/*********************************************************************
インデックスを利用すべきかどうかの判断基準としては
絞り込み率が全体の1%未満・・・インデックスを利用すべき
絞り込み率が全体の5%未満・・・場合によるので別途検討が必要
絞り込み率が全体の5%以上・・・インデックスを利用すべきでない
また、インデックス利用時はWHERE句の条件にて
インデックスの項目をインデックスの定義順に追加すること。
**********************************************************************/
SELECT /*+ INDEX(A PK_A) */ FROM DUAL A
WHERE A.DUMMY = 'PK_VALUE';

/**---- 結合順序 ----**/
/*********************************************************************
テーブル結合順序は、結合結果の行数ができるだけ少なくなる順にする。
**********************************************************************/
SELECT /*+ LEADING (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;

/**---- 結合操作 ----**/
-- NestedLoop結合
/*********************************************************************
駆動表×結合対象をループ処理で結合していく結合方式
結合対象が、パーティションやインデックスで絞り込める場合に有効
結合結果が順次取得できるので、Webアプリの画面に向く。
**********************************************************************/
SELECT /*+ USE_NL (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;

-- HashJoin結合
/*********************************************************************
駆動表のハッシュテーブルをメモリ上に作成し、
それに対して結合対象のテーブルを紐づけていく結合方式
結合対象が、大量データや表の大部分を占める場合に有効
ただし、あまりに大量すぎると、メモリを逼迫してしまいDB全体に影響を与えてしまう。
結合が全て完了しないと結果が取得できないため、Webアプリの表示等には向かない。
**********************************************************************/
SELECT /*+ USE_HASH (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;


gistにもあげてみた

2011年4月16日土曜日

よくわかっていないターゲットアクションパラダイム

さっぱりわからん。

登場人物
- 部品(Cell?Outlet?)ボタンとかを想定。
- イベントが起こった場合に動くロジックが書かれたオブジェクト
- コントローラ。いろいろ制御する人
部品くん
- ロジックが書かれたセレクタ(SEL型)とそのセレクタを持つ型(id型)を持つ。
https://github.com/544/HelloWorldCUI/blob/master/HelloWorldCUI/HelloCell.h
- イベントが起こった場合、自分が持っているid型のSEL型セレクタを呼び出す。
部品君はid型やらSEL型やらの中身がなんなのかはしらない。

コントローラ君が部品とロジックを紐づける。
https://github.com/544/HelloWorldCUI/blob/master/HelloWorldCUI/HelloController.m
なにかイベントが起こったら、部品君のセレクタを呼び出す。
すると、部品君が持ってるid型のオブジェクトのセレクタが呼ばれる。

やっぱりよくわからない・・・・。

2010年3月27日土曜日

macbookでzsh

MACのターミナル上でニホンゴが化ける。
ずっと、itermの問題だと思ってましたよ。
viで化けないことで怪しいと思わないとだめだよなぁ。
ってことでUTF-8が化けるOSXデフォルトのzshを窓から投げ捨てる手順。

sourceForgeから4.3.2(zsh-dev)のソースを落とす。
http://sourceforge.net/project/showfiles.php?group_id=4068
適当なとこに置いて、解凍して、インストール。./configureにオプションつけることに注意。
tar zxvf zsh-4.3.2.tar.gz
cd zsh-4.3.2
./configure --enable-multibyte --enable-locale
make
sudo make install
で、設定ファイル。
~/input.rcに以下追記
set kanji-code utf-8
set convert-meta off
set meta-flag on
set output-meta on
set input-meta onset enable-keypad on

~/.zshrcに以下追記export LANG=ja_JP.UTF-8

で、/etc/shellsに以下追記、/bin/zshはコメントあうと/usr/local/bin/zsh
で、chshして、デフォルトシェルを
Shell: /usr/local/bin/zsh


いじょ。
あー、zshいいよzsh

MacBook - Synergy2 - Windows

macbook から windowsをリモートで動かすメモ
最終系はこんな感じ。
Synergyサーバ:MacBook(キーボードとタッチバッドはこれを利用)
Synergyクライアント:Win端末(操作される側。
本家はここ
http://synergy2.sourceforge.net/
事前準備としてやることは。
1. Macのマシン名を調べる。
ターミナルで、hostnameとか打てばわかるけど。
システム環境設定 - インターネットとネットワーク - 共有を開けば編集もできる。
とりあえず例として mac.local であるとして話を進める。
2. Winのマシン名を調べる。
マイコンピュータでプロパティ - コンピュータ名 で調べられる。
とりあえず、 win であるとして話を進める。

さて、まずはサーバから。
本家からバイナリを落として、と言いたいところだが、
本家の奴だとBus Error がでて動きゃしねぇ。
ってことで、以下サイトからOSXで動くバイナリを落とす。
http://blog.masuidrive.jp/articles/2006/03/24/synergy2-on-intel-mac
適当なとこに展開して、synergy.confを以下のように変更
# つながってるPC群
section: screens
win:
mac.local:
end
# 接続設定
section: links
mac.local:
right = win
win:
left = mac.local
end
# オプション設定
section: options
# 2回のタップで移動
switchDoubleTap = 250
end
mac.local とか win とかは最初に調べたマシン名で置き換えること。
mac.local の 右 に win があって winの左にmac.localがあるっていう設定。
switchDoubleTapは移動するときにマウスカーソルを画面端に合わせるだけじゃなくて、
コンコンって2回端に合わせないと移動しないようにする設定。誤移動防止。
ここまでできたら試しに動かしてみる。ターミナルから。
./synergys -f -c ./synergy.conf

稼働確認したいのでmacの設定適当だけどwin側の設定に。
以下サイトから日本語化されたインストーラを落としてきてインストール
http://wiki.nothing.sh/page/memo/Synergy
起動したら、「ほかのコンピュータのキーボードとマウスを使用する(クライアント)」にチェックを入れて、
サーバのホスト名にmacのIPアドレスなりを入れる。
で、スタート。
うまく動いたらスタートアップに登録するなりなんなり。
で、再び mac
とりあえず、実行ファイルを/usr/local/bin あたりに置く。
と思ったら /usr/local 自体がなかったので掘る。当然rootで。
mkdir -p /usr/local/bin
cp -p ./synergys /usr/local/bin
あ、ちなみにsynergyc はクライアントなんで注意。
設定ファイルは/etc/synergy にでも置く。

mkdir -p /etc/synergy
cp -p ./synergy.conf /etc/synergy.conf
で、こいつをキックするためのフックスクリプトを設定する。
まずはスクリプトをつくるとこから、ルートになって
mkdir -p /Library/LoginWindow
vi
/Library/LoginWindow/LoginHook.sh
LoginHook.shの内容はこんな感じ。

#!/bin/sh
prog=(/usr/local/bin/synergys -c /etc/synergy/synergy.conf)
### Stop any currently running Synergy client
killall ${prog[0]##*/}
### Start the new client
exec "${prog[@]}"
書き終わったら実行権をつけて。

chmod 755 /Library/LoginWindow/LoginHook.sh
起動時のフックスクリプトに設定。
defaults write com.apple.loginwindow LoginHook /Library/LoginWindow/LoginHook.sh

これで再起動時に自動的に起動するようになる。


section: options
switchDoubleTap = 250
mousebutton(control+1) = mousebutton(3)
end