Wednesday, December 31, 2008

2008 年のできごと

2008-01-01 -2008-03-31

2007-10 から参加していたプロジェクトで、別の仕事をいただいて自社で開発しはじめた。
年末年始を返上して仕事をした。(まったく手当てなし!交通費すら
何度も仕様が変更された。
自社の人間をメインに開発の作業を進めていったが、納期に間に合わせられなかった。
現場は、かなり悪い居心地となった。
かつ、この案件で思うように開発できないことが確定しつつあった。
仕事のストレスからか胃腸の調子が更に悪化し、検査するはめになった。
契約を延長せず終了した。
結局、海外で仕事できずに終了した。



2008-04-01 -2008-6-19

とりあえず、1 か月だけ自社で仕事をすることにした。
といっても、受託で開発をしているわけでもないので、まったく仕事がない。
角度が高い会社にすら連絡してくれないようだった。
1 か月の予定が 6 月中旬まで延びた。



2008-06-20 -2008-08-31

それでも、なんとか開発の現場に参加できた。
ただし、明らかに要求されているスペックに届いていなかった。
かなりお客さんに迷惑をかけてしまった。
毎日、ガスター 10 を飲んでいた。
「締切り」という言葉を聞くと、敏感に反応するようになってしまった。



2008-09-01 -2008-11-30

面接の状況からダメだと思っていたが、なぜかゲーム会社の案件に潜り込めた。
技術社が大切にされている会社だった。
お客さんの担当者に不満を感じなかったが、チームのメンバにストレスを感じていた。
自分が経験不足であることを改めて実感した。
お客さんの業績が不振でもあり、他のメンバと共に延長されず、終了してしまった。



2008-12-01 -2008-12-31

再び、自社に戻った。
新たに案件を開拓する気持ちを感じられなかった。
昔のことでグダグダ文句を言われた。
どう考えても、「不要」と主張されているようにしか受け取れなかった。
今後も開発の案件に参加できなさそうだった。
社外での活動や人脈についての大切さを理解してもらえなかった。
自分が成長するための環境として適切でない、と判断した。
月末に会社を退職し、夏の案件で知り合った技術者の会社へ転職した。

Installing And Enabling JSTL

メモ

JAR ファイルを配置する



WEB-INF/lib
に以下のファイルを保存する。

jstl.jar
standard.jar

これらの jar ファイルは、Tomcat の example に付属されている。

// アプリケーションサーバの "WEB-INF/lib" ディレクトリにも同様にファイルを配置する。



JSP ファイルに記述する



<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Defining error pages in the DD


<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/errorPage.jsp</location>
</error-page>

<error-code>
    <exception-type>java.lang.NumberFormatException</exception-type>
    <location>/formattingError.jsp</location>
</error-code>

<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>




Note:
1. You can override these definitions in each JSP by adding a page directive with an "errorPage" attribute.

Tuesday, December 30, 2008

Making your own error pages in JSP


<%@ page errorPage="errorPage.jsp" %>

Monday, December 29, 2008

Invoking your custom function in JSP

カスタムメソッドを定義し、JSP から実行できるようにする。


Creating new project



Eclipse において、"Dynamic Web Project" を作成する。本ポストにおいて、プロジェクト名を "HOGE" とする。



Creating a class



メソッドを static に指定し、クラスを作成する。


package jp.launchpad.app;

 
public class MyClass {
    public static String getToday() {
        return (new java.util.Date()).toString();
    }
}




Creating a tld file



TLD ファイルを作成する。ファイルを "WEB-INF" に保存する。とりあえずファイル名を、"myFunctions.tld" としておく。


<?xml version="1.0" encoding="UTF-8" ?>

<taglib
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">

<tlib-version>1.2</tlib-version>
<uri>myFunctions</uri>
<function>
    <name>getDayAndTime</name>
    <function-class>jp.launchpad.app.MyClass</function-class>
    <function-signature>
        String getToday()
    </function-signature>
</function>

</taglib>




Creating a JSP file



TLD ファイルで定義したメソッドをコールする JSP ファイルを作成する。


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="mine" uri="myFunctions" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>a.jsp</title>
</head>
<body>
${mine:getDayAndTime()}
</body>
</html>




確認



http://localhost:8080/HOGE/a.jsp

Sunday, December 28, 2008

今日のスパム

わざわざ docomo.ne.jp のアカウントを使用して送信してきた。ご苦労さまでした。

((ここから))

(株)ジャパンネットの中村と申します。

お客様の携帯端末より会員制有料サイトへご登録され、無料期間中に退会処理がされておらず、登録料金未納となっております。

現在、サイト運営会社が長期延滞者に対し『少額訴訟』の準備を進めております。このまま放置致しますと、『電子消費者契約法』に基づき民事訴訟となります。

当社は料金清算・退会処理代行、訴訟差し止め等『和解業務』を行う第三者機関となります。

お支払いお忘れの方、誤ってのご登録のお客様はトラブルとなる前に早急にご連絡下さい。

ご相談窓 0332558618
営業時間 9時30~20時
担当 中村

お力となれるのは最後となりますので、お早めのお電話お待ちしております。

((ここまで))

Saturday, December 27, 2008

Setting ACL with ZFS on OpenSolaris

TODO : must be updated!!!

Trying to do...


さて、Solaris いや正確に OpenSolaris において、ZFS が提供する新しい ACL を設定してみた。簡単にログを記述しておこうと思う。主に、将来の自分が簡単に思い出せるよう記述しているため、説明が不足している部分が多々、存在すると思う。

まず、そもそも Solaris の ACL つまり Access Control List を設定してみようと思った理由は...、単に会社の上司が

Solaris ZFS が提供する ACL を使用したいので簡単にまとめてほしい

みたいに、私へ依頼したから、である。

調査したところ、Linux においても kernel 2.6 系で同様の ACL をサポート --- 一部の distribution において kernel 2.4 系へバックポート --- されているらしい。Linux の distribution で ACL を制御する場合、"setfacl" や "getfacl" コマンドを実行して ACL を設定する。パッケージをインストールしなければならないだろう。Solaris においても同様に ACL を設定できた。ただし、最新の Solaris の場合、"chmod" コマンドで ACL を設定できる。追加でパッケージのインストールを必要としない。

そもそも、これまで私は、いわゆる UNIX を経験していなかったため、正直なところインストレーションも満足に操作できないだろうと思っていた。だが、ちょうどよい機会だと考え、Solaris にチャレンジしてみることにした。

Solaris は有料だと勘違いしていた私は、OpenSolaris の存在をしっていたため、OpenSolaris をインストールすることにした。OpenSolaris の Web サイトである

http://opensolaris.org/

を表示し、右上に表示されているはずの CD アイコンをクリックすると、ダウンロードページを表示できる。

画面の右側に "Quick Download Links" という枠が表示されており、"OpenSolaris 2008.11" というリンクをクリックすると OpenSolaris の ISO image ファイルをダウンロードできる。サイズは約 700 MB だ。ダウンロードしたら MD5 値を確認しておこう。

% md5sum osol-0811.iso
23176e28d47e61777f6d246e459b795d  osol-0811.iso
%

私は、この ISO image を使用して VMware Fusion に OpenSolaris をインストールした。もしマシンにインストールするなら CD-ROM に ISO image を焼いて、その CD-ROM を使用してマシンを機動させる。




Trying to set ACL on ZFS...



Solaris ZFS が提供する ACL を摘要してみる。なお ACL の詳細を以下のページで確認できる。

Setting ACLs on ZFS Files


今回の要件を列挙してみる。

- "${USER_HOME}" をユーザのホームディレクトリとする。
- ユーザのホームディレクトリを "/rpool/USER_HOME" に作成する。
- 各ユーザは、ホームディレクトリに rwx 権限を有する。
- 各ユーザは、他ユーザのホームディレクトリに --- 権限を有する。
- 各ユーザのホームディレクトリに、ユーザが所属するグループは --- 権限を有する。
- 一般ユーザ "admin" は、各ユーザのホームディレクトリに rwx 権限を有する。
- "${SOMEWHERE}/pub" ディレクトリに、すべてのユーザは rwx 権限を有する。


以下は作業の記録なり。

% su -

# zfs create rpool/USER_HOME
# zfs set aclinherit=passthrough rpool/USER_HOME
# zfs set aclmode=passthrough rpool/USER_HOME


// 各ユーザ用のホームディレクトリを作成する。

# mkdir /rpool/USER_HOME/user00
# mkdir /rpool/USER_HOME/user01
# mkdir /rpool/USER_HOME/user02


// ユーザを作成する。

# useradd -d /rpool/USER_HOME/user00 user00
# useradd -d /rpool/USER_HOME/user01 user01
# useradd -d /rpool/USER_HOME/user02 user02


// オーナーとグループを変更する。

# chown -R user00:staff /rpool/USER_HOME/user00
# chown -R user01:staff /rpool/USER_HOME/user01
# chown -R user02:staff /rpool/USER_HOME/user02


// パーミッションを変更する。

# chmod -R 700 /rpool/USER_HOME/user00
# chmod -R 700 /rpool/USER_HOME/user01
# chmod -R 700 /rpool/USER_HOME/user02


// ACL を設定する。

# /usr/bin/chmod A+user:apache:read_data/write_data/add_subdirectory/execute:file_inherit/dir_inherit:allow /rpool/USER_HOME/user00
# /usr/bin/chmod A+user:apache:read_data/write_data/add_subdirectory/execute:file_inherit/dir_inherit:allow /rpool/USER_HOME/user01
# /usr/bin/chmod A+user:apache:read_data/write_data/add_subdirectory/execute:file_inherit/dir_inherit:allow /rpool/USER_HOME/user02


// "pub" ディレクトリを設定する。

# mkdir /rpool/USER_HOME/pub
# chmod -R 700 /rpool/USER_HOME/pub
# chown -R admin:staff /rpool/USER_HOME/pub
# /usr/bin/chmod A+group:staff:read_data/write_data/add_subdirectory/execute:file_inherit/dir_inherit:allow /rpool/USER_HOME/pub

Sunday, December 21, 2008

DESK@

外出しているとき、たまに PC を使って作業したくなる。メールを返信したり、短い時間だが集中して作業したいときとか。そんなとき、これまでだったら喫茶店に入店し、コーヒーを飲みながら作業したりする。ただし、うっかりマクドナルドとかを選択してしまうと、綺麗なテーブルを探しにくい、他の客がうるさかったりするもので、落ち着いて作業できない。

1 日いっぱいじゃなくていいので、ほんの数時間、落ち着けるスペースを確保できるようにしておきたかった。そして、そのようなサービスが提供されているのか?を検索してみた。すると、様々な業者が、様々なサービス名で提供しているようだ。それらのサービスのうち、ひとつをピックアップしてみた。

DESK@

KOKUYO が提供しているサービスのようだ。都内で利用できる場所は、日本橋と新宿と品川だ。自宅が位置する足立区からの距離は、どれも微妙に遠かったりする。

会員に登録すると、個人スペースを 490 yen / 15 minutes でレンタルできる。この料金プランの場合、完全に個室で、かつ、施錠もできるらしい。一時的に外出 - コンビにとか - するときにも安心だろう。1 時間で 1,460 円だ。あまり安くないかもしれない...。なお、会員に登録する場合、年会費を支払わねばならない。費用は、3,780 yen / year らしい。先ほど言及した個室を「非」会員がレンタルすると、790 yen / 15 minutes であるため、15 分あたり 300 円の差が発生する。年に 12.6 回以上サービスを利用する場合、会員になるべきだ。1 回あたり 1 時間を利用すると仮定すると、年に 4 回以上サービスを利用する予定なら会員になるべき、となる。

Web で会員登録の一部を済ませておくと、特典を受けられるようだ。

とりあえず、次に利用したい時期を確定していないので、事前の申し込みもしていない状態だが、ぜひ、利用してみたいサービスだと感じている。

SUMO Paint

SUMO Paint なる、画像を編集するアプリケーションを発見した。アプリケーションといっても、インストーラーをダウンロードして...、といういつもの作業を必要とせず、Web ブラウザで画像を編集できてしまう。しかも Flash で作成されているため、プラットフォームを問わず、操作できるわけだ。主に Linux OR Mac を使用している私にとって、非常にありがたい。

Thursday, December 18, 2008

2008-12-18 の記録

面接だった。

Wednesday, December 17, 2008

2008-12-17 の記録

最近、Twitter で小言を書くようになってから、めっきり blog に書き込まなくなってしまった。。。しかし、この日の出来事を、忘れず記録に残しておこう。

本日、私は上司へ退社の意志を伝えた。12 月いっぱいで退社する。実に 27 か月の間、この会社の社員として仕事をしてきたが、今月で最後となる。急に意志を表明したが、私の行動を上司は十分に予想していたと思う。そのようにして構わない、と、以前から上司が言っていたからだ。

私は開発の業務を経験するために今の会社へ転職した。前の会社で開発の業務を経験できなかったからだ。ただし、約 2 年を振り返ると、"開発" OR "他" の業務が、おおよそ 50 : 50 となっており、なかなか開発の仕事にありつけなかった。受託開発も単発であるため、主に客先で仕事をしている私は、タイミングをあわせられなかったりもした。

この約 2 年を振り返り、そして、その 2 年から数年後のプランを想像すると、とても満足できそうになかった。そして、それなら他の会社で仕事をするべきだ、と判断するに至った。案件を紹介してくれようとしていた社外の営業さんにも申し訳なく思うが、自分のキャリアを積み上げるために、better な選択をドライに決断した。

上司は、私の意志を尊重してくれた。感謝している。正直、いくつかの大きな不満も存在するが、今の会社を嫌っているわけじゃない。いつか、また一緒に仕事をするかもしれない。

今後、2, 3 年の間、初心に戻り、少し条件が悪い場合でも食らいつきながら業務を経験したいと思う。私も、もう 30 歳になってしまった。道は狭くなる一方かもしれないが、耐えてみせる。

Sunday, December 14, 2008

2008-12-13 の記録

ある会社が開催した忘年会に参加した。

Friday, December 12, 2008

"for" loop in bash

今日、新人に bash を使用してスクリプトを書かせていたが、通常 for を使用する部分で、彼女は while を使用した。bash の for ループで、意外と知られていな?い書き方が存在する。


for ((i=0; i<10; i++)) ; do
    echo "hello $i"
done

Thursday, December 11, 2008

IPv6 Configuration On Ubuntu Linux

Ubuntu Linux の IPv6 を設定するテスト



最新の Ubuntu Linux は IPv6 をサポートしているが、念のため、確認する手順を復習しておく。


1. Kernel が IPv6 をサポートしているか?

% cat /proc/net/if_net6


2. IPv6 kernel module がロードされているか?

% lsmod | grpe -w 'ipv6'


3. loopback address が機能しているか?

% ping6 -c 1 ::1


4. Pinging Link Local IPv6 Hosts

% ping6 -c2 -I ath0 fe80::205:4eff:fe4f:f574


5. 2 台の端末に IPv6 address を割り当て通信してみるテスト

"ip" コマンドを実行し、2 台のホストのそれぞれの NIC に IPv6 の Unique Local Unicast addresses を指定する。その後、互いの PC から "ping6" コマンドを実行し、それぞれ reachable であるかを確認する。

# ip -6 addr add FC01::1/64 dev eth0
# ip -6 addr add FC01::2/64 dev eth0

Monday, December 08, 2008

Invoking "sudo" Command Without Inputting Password On Ubuntu

最近、Ubuntu Linux をインストールして使用している人が多くなってきている(と個人的に感じているが証拠はない)が、過去に Linux ディストリビューションのインストールを経験している人は、インストールを完了した後、疑問に感じるだろう。そう、root のパスワードの設定が要求されなかったから、だと思う。

Ubuntu Linux の流儀として、一般的に root で実行するべきと考えられる作業 --- たとえば各種デーモンをリスタートするときなど --- を実行するとき、"sudo" コマンドを実行する。

つまり、一般的なディストリビューションにおいて、このように実行するとき

% su -
# apt-get update

Ubuntu Linux の場合、

% sudo apt-get update

と実行する。


"sudo" を実行すると、"sudo" を実行した一般ユーザのパスワード --- root のパスワードでなく --- を入力するようプロンプトが表示される。正しいパスワードを入力すると、続くコマンドが実行されるわけだ。


"sudo" コマンドを実行してパスワードを入力すると、その後、しばらくパスワードを入力せずに "sudo" コマンドを実行できるが、有効時間が expire してしまうと、改めてパスワードを入力しなければならない。人によって、これを煩わしく感じるかもしれない。


私の場合、Ubuntu Linux をインストールした直後、ターミナルを機動し、以下のコマンドを実行する。

% sudo passwd root

つまり、root のパスワードを設定し、一般的なディストリビューションと同様に root の作業を root にスイッチして作業する。ただ、これは Ubuntu Linux の流儀に反しているかもしれない。


別の方法を記載する。ただし、これはセキュリティ的なリスクを負わなければならない。内容は、"sudo" の設定ファイルを編集し、特定の一般ユーザが "sudo" コマンドを実行したときパスワードの入力を要求するプロンプトを表示させず、かつ、"sudo" に続くコマンドを実行させるよう変更する方法だ。

この仕組みを実現するために、"/etc/sudoers" を編集する。ただし、直接このファイルを編集せず、"visudo" コマンドを実行する。

% sudo visudo

"visudo" を実行すると、"/etc/sudoers" を編集できる。ちなみに、デフォルトの場合、"nano" というテキストエディタが "/etc/sudoers" をオープンするはずだ。このエディタを使用したくない場合、以下のように "EDITOR" または "VISUAL" 環境変数を設定すると、どちらかの環境変数に設定されたエディタで "/etc/sudoers" をオープンできる。

% export EDITOR="/usr/bin/vi"

または

% export VISUAL="/usr/bin/vi"


デフォルトの "/etc/sudoers" の内容は以下のとおりだ。


# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL


この内容を、以下のように編集する。


# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

you ALL=NOPASSWD:ALL


"you" の部分に、ユーザ名を記述する。このユーザが "sudo" コマンドを実行すると、パスワードを要求するプロンプトが表示されなくなる。"Uncomment..." のあたりに説明されているとおり、このファイルの末尾に記述する。記述を終了したら、エディタを exit しよう。新たにターミナルを起動し、"sudo" コマンドを実行して、どのように動作するかを確認できるだろう。

Wednesday, December 03, 2008

2008-12-03 の記録

「自宅で仕事をしてよい」と上司から許可をもらっていたため、自宅で仕事というか作業をした。いつもどおり 7 時に起床したが、最近、ちょっと寝不足だったため、8:30 から 9:30 まで寝てしまった。12:00 から 13:00 に昼寝をしつつ、午後に面談がスケジュールされるかもしれない、という連絡をもらっていたため、待機しつつ作業した。iBATIS の操作でつまづいたが、なんとかクリアした。ただ、あのような問題は、プログラミングっつーかー、フレームワークを操作しているだけであり、まったくプログラミングでない。ほとんど頭を使わないからだ。こんな作業ばかりしていて、プログラミングのスキルを上げられるわけない、と本気で感じている。

Tuesday, December 02, 2008

2008-12-02 の記録

今日も自社で仕事をした。仕事といっても、自習みたいな内容だ。せっかく時間を確保できたので、先月までの業務で経験した Struts 2 + Spring + iBATIS の組み合わせで、なんちゃって Web アプリケーションを開発してみようと、作業を開始してみた。後輩の女性に Eclipse の debug モードについて説明した。Tomcat plugin をインストールしている環境に置いて、breakpoint を指定すると自動的に debug モードが有効になるようだった。

例の会社の人から電話をもらった。「まだ判断できていない」と伝えた。正直なところ、今の会社で受託開発をしないかぎり、ほぼ確実に客先での仕事を探さなければならないが、肝心な、その案件をもってこれないので、案件を終了したとき、次の案件を決定するまで、けっこう大変だったりする。そう、今回のように間をあけてしまったりするわけだ。よろしくない状況だったりする。派遣会社の方が、よっぽど案件をもっているし、給与も安定しているだろう、と本気で考えている。

Monday, December 01, 2008

2008-12-01 の記録

久々にスーツを着た。自社の社内は、正直、キレイじゃないので、特にクリーニング戻りの服を着ていくとき、かなり気をつかう。キレイな場所で仕事をしたい。