沸騰冷水

煮え滾った熱い思いを氷のように冷たく見つめなおしたい

台所に寝ることの効果

もしかしたら伝わらないかもしれない。いつか見返しても理解できないかもしれない。

でも、今すごく不思議な気持ちになってるからこれをできる限り言葉にしてみようと思う。

俺は今、というかここ数日、台所に寝てる。

台所に寝てるといっても、雑魚寝ではなくて、安い布団を敷いて寝てる。

今週は、出張で自宅から離れて本社の方へ来てるんだ。

本当なら出張者は、社員寮という名の一戸建て住宅の一室に泊まるんだが、その唯一の一室へ後輩が先に来てた。

後輩といってもグループ会社の一つ年下の子で、こいつがまた頑張り屋で、堅実家で、いいやつなんだけど、こういう奴に限って、仕事が忙しいんだよな。

それは置いといて、唯一宿泊できる場所が埋まってたわけだ。それを俺は知らなかった。

寮はその一戸建てと、築30年くらいの4戸の団地っぽい造りの鉄筋のアパートで、グループ会社全体で使ってる。

アパートの方は全部部屋が埋まっていて、その内の一部屋は一緒に出張に来た同僚の営業マンの第二の家みたいになってる。

アパートは、造りは違えど一戸につき二部屋あって、同僚の相部屋はこれまた今年二十歳になったかわいい後輩が住んでいる。

で、出張者用の部屋では、先に来ていた後輩が寝れない勢いで仕事をしてたんだ。もう追い込まれてる、ヤバイ。と。

そんな状態なので、こりゃ邪魔しちゃ可哀想だと、アパートの方の同僚の部屋の台所に寝ることにした。 全然綺麗じゃないけど、水場くらいしか使われてないから油は出てないのが救いかな。布団に油つかないし。

他の場所あるだろって思うかもしれないけど、会社に近い場所で他に思いつかなかったし、ホテルに泊まるなんて許可出ないしね。

布団は泊まって二日目に届いたから、初日は同僚から少し分けてもらった。ありがとう。

ちなみに、時間も早くないし、みんなのプライベートもあるから、同僚、後輩で飲みながら雑魚寝っていう雰囲気じゃない。仕事もあるし。

一人、コンビニで買った安いパック酒をストローで吸いながら、音楽を聴くでもなく、飯を食うでもなく、静かに、冷蔵庫の音と、たまに聞こえる部屋からの生活音を受けながら天上見てるしかない感じ。

イスもテーブルもなく、四畳半もないような台所の地べたに座ってるか、布団敷いて寝るしかないのよ。

以前も布団が用意されてなかったり、いろいろあって、この台所に寝るのは初めてじゃなかった。

その度に、「俺って会社に歓迎されてないのかなー」とか「俺の人生ってなんなんだろう?」って気持ちがどんどん落ち込んで、寝る場所に呼応するように、ひもじい感情が湧いてきてた。

でも、今回は何か違った。

辛くないんだ。これが。

ただ単に慣れただけかもしれない。自暴自棄になっているだけかもしれない。思考停止や、麻痺してるのかも。

やっぱり床が固すぎるってのは否めないんで、日中ちょっとしんどいのはあるけど、気持ちの萎えとかを感じない。

むしろ逆だった。

「今日も寝る場所があって良かった。ありがとう。」みたいな気持ちになった。

会社にはもちろん感謝の意なんて無い。呼ぶなら泊まる場所くらいどうにかするか金出せよ。

今日で台所に寝るのは三日目だけど、未だに辛さはない。

何が違うんだろう?

事実は変わらないのに。

俺の捉え方が変わったのは間違いなさそうだ。

俺の中で「生活する」といことが「生きている」だけで良しとするレベルまで下がったから耐えられるようになったのか?

それとも、本当に何か大きなものに感謝してる、できているような強さを手に入れたから、苦じゃないのか?

どちらにしてもまるで禅行みたいだ。

ホテルじゃなきゃ嫌だ。襖じゃプライベートが無いのと同じ。みたいなことにはならないのは良いことか悪いことか。

それがこの先生きて行くのに必要か疑問だ。

ただ、この捉え方、考え方が変わるプロセスをもう少し理解できれば、もっと柔軟に生きていけるような気がする。

一番手っ取り早くMacのIDEで入力補完を有効にする手順

Spotlightとの競合

Macを購入して、何らかのIDEを入れたり、私の場合は VMWare上にwindowsを入れたりして開発環境を整えました。

簡単なコーディングならVimを使って行えば問題ないのですが、大枠を組んだり、即座に実行して確認したいだけのプログラムを作るときはIDEが便利です。

そんなときにIDE上で入力補完をするとき、癖で Ctrl + スペースを押しますが、Macのホットキーでは Spotlight のクイック検索が立ち上がってしまいます。

使わないから切ってみたらそこそこ快適

便利と言われる Spotlight ですが、私の場合はまったくといっていいほど利用していませんでした。

なので、各IDEのキーバインドを変更するより、Spotlight のホットキーを無効に設定したほうが手っ取り早いと思って実行。

手順

システム環境変数 → キーボード から キーボードショートカット を選択します。

左の一覧から Spotlight を選択し、右側のホットキーのチェックを外します。

完了

以上で完了です。

これでIDEの Ctrl + スペース で入力補完が動くようになりました。

Macを利用している皆はどのような設定をされているかわかりませんが、自分が思いついた手っ取り早い方法がこれ。
便利な方法があったら教えてほしいところだけれど、マカーの先人に聞いてみると、キーボードはカスタマイズしてナンボだ、的なことを言われたので、面倒だったのでとりあえずこれでいいかな。

OracleのPL/SQLでメールを送信する

OraclePL/SQLアプリケーションからメールを送信できるのか

アプリケーションを実行し、あるアクションのタイミングでメールを送信したい。
そんな時はOSのコマンドではなく、PL/SQLからメールを送信したいと思う。
というわけでPL/SQLからメールを送信する方法について調べた。

環境

・Oracle9i(9.2.0.4)
・AIX5.3

方法

ユーティリティのUTL_SMTPパッケージを使います。
UTL_SMTP
上記サイトの「UTL_SMTP」の使用方法→「例」にサンプルコードがあります。

DECLARE
  c UTL_SMTP.CONNECTION;

  PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
  BEGIN
    UTL_SMTP.WRITE_DATA(c, name || ': ' || header || UTL_TCP.CRLF);
  END;

BEGIN
  c := UTL_SMTP.OPEN_CONNECTION('smtp-server.acme.com');
  UTL_SMTP.HELO(c, 'foo.com');
  UTL_SMTP.MAIL(c, 'sender@foo.com');
  UTL_SMTP.RCPT(c, 'recipient@foo.com');
  UTL_SMTP.OPEN_DATA(c);
  send_header('From',    '"Sender" <sender@foo.com>');
  send_header('To',      '"Recipient" <recipient@foo.com>');
  send_header('Subject', 'Hello');
  UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF || 'Hello, world!');
  UTL_SMTP.CLOSE_DATA(c);
  UTL_SMTP.QUIT(c);
EXCEPTION
  WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
    BEGIN
      UTL_SMTP.QUIT(c);
    EXCEPTION
      WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
        NULL; -- When the SMTP server is down or unavailable, we don't have
              -- a connection to the server. The QUIT call will raise an
              -- exception that we can ignore.
    END;
    raise_application_error(-20000,
      'Failed to send mail due to the following error: ' || sqlerrm);
END;

10行目〜16行目のアドレスを変更すればとりあえずメールの送信は可能になります。


しかし、このままでは日本語を含むマルチバイトコードが送信できません。
日本語を UTL_SMTP.WRITE_DATA に含めても文字化けしてしまいます。
日本語を送信するには、マルチバイトコードをRAWに変換し、メール文面に含める必要があるようです。

18行目

UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF || 'Hello, world!');

に変更が必要です。

メール本文を書き込む関数として、もう一つ、UTL_SMTP.WRITE_RAW_DATA 関数があります。
こちらを使って、メール本文にRAWデータを渡してあげます。

上記18行目を例としましょう。
'Hello, world!' を 'ほげ' にして日本語を送ります。

UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW(UTL_TCP.CRLF || 'ほげ'));

RAW型のデータを関数に渡すため、本文データをそのまま、UTL_RAWパッケージのCAST_TO_RAW関数を使って、RAW型に変換しています。
このとき、UTL_TCP.CRLF の改行コードも一緒にRAW型に変換する必要があります。

以上

UTL_SMTPには他にも添付ファイルを含める方法などがありますので、ご利用の際にはぜひ一読を。

Ubuntu 10.04 Server 日本語文字化けの解決方法

自社のVMサーバーにUbuntu Server 10.04をインストールした。
インストール自体は特に問題無かったが、CUIで操作していると、文字化けがひどい。
日本語を選んでいるからか、うまく表示できていないようだ。

解決方法は簡単(要再起動)

.bashrcに以下を追加する。

case $TERM in

linux) LANG=C ;;

*) LANG=ja_JP.UTF-8 ;;

esac
Ubuntu 10.04 Serverの導入−1 イントロ

この後は、再起動(リモートなら再接続?)すればコマンドなどの文字化けが消えている。

もっと早く読みたかったTDDとペアプログラミングの記事

TDD良記事

TDDを始めたいと思っていて、試作したりしていたが、どうも自分の道筋が合っているのかわからない。また、TDDに関するしっかりした書籍を読んだわけでもなく、まずはその効能を知りたいと思っていた。
TDDとペアプログラミングについて詳しく、実際にあったやりとりを読みながら理解できる。

TDD(テスト駆動開発)をはじめたい人にオススメの資料(無料) | Act as Professional - hiroki.jp

リンク先では、はてブで評価ほしいとありましたが、はてブ使ってないので記事で紹介させていただきます。

感想

意外と時間がかかる、でもこれが正しい?

このやりとりを読みつつ、一人だけどTDDをVS2005とNUnitを使ってVB.NETで実践してみた。
すんなりと仕様を決めていたり、途中で詰まることなくTDDの流れに則って進んでいっているのが、実際にはすごく難しい。
二人、50分でこの成果だとすると、自分の場合はどのくらいかかるんだろうと、少しゾッとした。

ペアプログラミングが楽しそう

二人のやりとりを見ていると、ペアプログラミングがとても楽しそうに見える。
自分はやったことがないので、機会があったら誰かと実践してみたい。

homeに自動で作成されている日本語ディレクトリの変更方法

Ubuntuを日本語環境ということでインストールすると、homeに日本語の「ドキュメント」などのディレクトリが作成されてしまう。
これを英語にするコマンドがあったらしい。

日本語ディレクトリを英語にする
「デスクトップ」とかディレクトリ名が日本語になってて気持ち悪いので英語に。
$ LANG=C xdg-user-dirs-gtk-update

http://d.hatena.ne.jp/nowokay/20110601

1行で簡単チェンジ。
中身があるディレクトリは残ってしまったがそれほど重要でない。

サーバー切り替えであったトラブルとその対処

少し前に、ORACLEサーバーの切り替えを行った。
サーバーの切り替えだけならよくある話だが、それぞれ企業なのかシステムなのか、固有なトラブルに付き合わされた。
事前に準備はしていたつもりだったが、不足があり、本番切り替えの時間のない中での対応となった。
切り替えの大まかな概要はこうだ

  1. サーバーのIPは変更されても、DNSは変えない
  2. 2台のAPサーバー、1台のDBサーバー
  3. APサーバーはOracle Application Server 10g
  4. DBはOracle 9i(9.2.0.4)

他のシステム屋さんではどうやっているのかわからないが、本来であればサーバーのIPさえも変更したくなかったが、平行でLAN内に立ち上げておく期間があったため、IP、名前は別に立ち上げておき、本番切替時に名前をDNS上で変更する。という対応を行った。

foo (旧サーバー) IP: xxx.xxx.xxx.10
hage (新サーバー) IP: xxx.xxx.xxx.20

この状態でDNSでは

foo xxx.xxx.xxx.10
hage xxx.xxx.xxx.20

となるわけだが、これを切替時に

hage xxx.xxx.xxx.20
foo xxx.xxx.xxx.10

としてしまおう、ということだ。

果たして、通常こんなパターンで行うことはあるのだろうか?
みんなどのようにしているのか知りたい。


起きた問題は
Listenerサービスが起動しない
といったもの。

内容も原因も単純明解だったが、時間を食われたし、OiSCにも該当する内容が見つからなかった。
アイドルインスタンスには接続ができたものの、クライアント端末から接続しようとすると、10分ほど応答が返ってこず、その後タイムアウトしてしまう。
サーバーではどうなっているかというと、Lisnterが吐き出すログが10MB/秒ほどの勢いでエラーを吐きつづける状態になってしまった。

いろいろ切り分けをしつつ調べていくと、名前解決が原因だったようだ。
サーバー名がhageだとすると、自身のhostsに、「hage」と「hage.hoge.com」が必要だった。
事前に「hage」は登録してあったのだが、ドメイン入りの「hage.hoge.com」が入っていなかった。

あたりめーだよバーロー、と言われるかもしれない。
しかし、DBが上がるのにListenerだけ上がってこないのが納得いかない次第だった。