書評:「残業ゼロ」の仕事力

読み終わったのでメモ。

「残業ゼロ」の仕事力

「残業ゼロ」の仕事力

200ページあまりで、文章も難しくないので、ちょうど一日で読めるぐらいの分量です。
残業ゼロという切り口で仕事の進め方を説明しているのだけど、重要なのはこのポイント

  • 大きな問題は小さな問題へと分解する
  • 各課題には必ずデットラインをもうける
  • 会議は問題解決の場

トリンプの社長のため、経営者の視点からの話。
「残業は良いことだ」から「残業は悪」まで価値観を変えるにはトップの相当のコミットメントが必要ですね。
確かに最も残業していたときは、午後5時くらいからが仕事開始な気分だった面は否めません。本来現場の個人が恩恵を受けるのに、現場の考え方を変えていくのの抵抗は現場にあるなんてことが起きそうですね。8時間をフルに使うためには結構な意思改革が必要そう。

海外挑戦2.0

id:amachang のちょっと前のエントリを読んで、最近感じてたことと同じなので、ちょっと書いてみます。

国際問題と英語 - IT戦記

そういうのを見てると、国が違うと文化も思想も宗教も全然違うんだなあと思うのと同時に、「国と国が、貿易や政治や旅行客でしか繋がってなかった時代」とはぜんぜん違うんだなあと感動しました。

当たり前だけど、政治家と政治家が国際問題を話してるのと同時に、普通の人同士もみんな普通に話してるんですよね!

これってすごいことですね!

うん、すごいこと♪

ちょっと前までだと、海外の人と一緒になにか(仕事とかを)進めていくことって、結構大変で、たとえば、あるソフトウェアを作る場合とかはその組織に入り込んだりしなくちゃいけなかったから、自然に生活の場所もそちらに移してって流れになってたと思います。海外で生活するってことは多くの人にとってかなり敷居が高いことで、それはもう「海外挑戦」って言葉がぴったりくるような感じだったのではないかな。このちょっと前って実は5年も経ってないくらい。

でも、今はオープンソースプロジェクトとかで、そこに飛び込む勇気と行動力があれば、海外の人と一緒になにか仕事を進めるってことができるようになってますよね。これってほんとにすごいことだと思います。
今までは海外挑戦っていうとそれこそ「海を渡る!」みたいなところがあったんだけど、今はネットワークにさえつながっていれば、「お茶の間海外挑戦」ができるような時代になってきてるんですね。

あとは英語ですが、読む/書く は 聞く/しゃべる よりも敷居は低いと思うので、とりあえず自分が言えることがあったなら発信してみる。たぶん、この行動力と勇気があれば世界への道がひらけてくるんでしょうね。

きっと面白い時代です。

2007年

今年も、あと残す所2時間弱となりました。
今年はどんな年だったでしょうか?
僕は、10月に転職したため、例年に比べて変化が大きい年だったと思います。自分のあるべきことは何なのか、真剣に考えた一年でした。いろいろ悩みましたが、踏み出してみることにしました。来年の今はどんなことを言っているでしょうか?今年以上に良い年になれば良いですね。

さて、サイドB。今年の旅です。とりあえず海外のみをあげてみます。
1月インド 8日
4月ウズベキスタン 8日
5月アメリカ(JavaOne) 8日
8月フランス・ルクセンブルグ・ベルギー・オランダ 13日
11月スリランカ 5日

合計8カ国 42日

20%は達成できませんでしたが、今年も10%は越えました。来年もいろんなものをみれることを楽しみにしています。

みなさん、良いお年をお迎えください。

JavaのWebコンテナ上でPHPを動かす

最近、メッセージ指向ついていましたので、ちょっと違う話題を。

Javaの上でいろんな言語を実行することが結構はやっていますが(その筆頭がJRuby)、PHPってどうなのかな?と思ってちょっと探ってみました(PHPが言語として※●×☆じゃないのとかいう話はここではパス)。

そうすると、Quercusなるものを発見。Quercus(ってなんて発音するんだろう?)は、WebコンテナのResinのサブプロジェクトです。
で、最新のResinを落としてきて実行してみると、このQuercusはすでに統合されていて、xxx.phpなんてファイルをwebappsの下のどこかのディレクトリに置いておくと、QuercusのPHPエンジンによって処理されます。

この中から、Javaのクラスも利用できる模様。こんな感じにね。

<?php
  import java.util.Date;
  $a = new Date(123);
  echo $a->time;
?>

PHPJavaを連携させるって考えてみて、SugarCRMの中からJasperReportを呼び出しているZuckerReportというプロジェクトを思い出したんですが、これって実はReportを作成するたびに外部のプロセス呼び出しでVMを立ち上げています。無駄だよなと思っていたのですが、これを使えれば、普通にJasperのクラスを呼び出せばいいだけ。なかなかいいかもしれません。

ということで、取り合えずSugarCRMをQuercus上で動かそうとしましたが、インストーラでこけました。エラーをはいて止まっているのではなく、なぜか同じ画面遷移を行ったり来たり。どこかにログが出てればいいのですが、見つけられてません。
うーん、まだ道は遠そう。

1/18 丸レクにて

次回の丸山先生レクチャーシリーズにて、鈴木雄介君と一緒にひとつセッションを受け持つ予定です。
近いうちに、サイトがオープンになると思いますので、ぜひ聞きに来てください!

丸山先生レクチャーシリーズ2007-2008 第3回「SOAの現在」

日付は1月18日金曜日の午後、場所は、NECさんの田町のビルです。
今回話す内容は、ここ数日書き続けているCMMPの話です。このネタを披露するのは初めてなので、どうなるかわかりませんが、楽しいセッションにできればと思います。

CMMP、いろいろなレイヤにて

ここ数エントリ、はまりにはまっているContainer Managed Message-Passingですが、面白いのは、このアイディアが同時多発的にいろいろなレイヤに出現したことです。
まず、アプリケーションレイヤでは、WebBeansとSpring Integrationを紹介しました。
ちょっとクライアント寄りに眼を向けると、jMakiのイベント処理はpub/subモデルで出来上がっています。さらにOpenAjaxでは、OpenAjax Hubというものを中心に置き、異なるAjaxライブラリの統合をpub/subモデルでつなごうとしています。
一方、もっと大きな範囲のシステムインテグレーションの世界では、ServiceMix/JBIやMuleなんかは思い切りメッセージ指向です。

もちろん、すべてのメソッド呼び出しがメッセージ指向になるわけではありませんが、このあたりの変化は非常に注目しています。

Container Managed Message-Passing : Springでは?

一つ前のエントリで書きましたContainer Managed Message-Passing(CMMP)ですが、この前出した例はWebBeansでした。
この手の考え方は、今いろんなレイヤに出現しています。この話は別エントリで、そのうち。
今回は、WebBeansと同じレイヤ、アプリケーションレイヤに注目してみます。アプリケーションレイヤと言えば、僕的にはSpringは外せません。Springってこのあたり、どうなの?って所ですが、ちょっと前まではまだまだでしょ?っと思っていたのですが、いえいえ結構キチンと来ていました!
ちょっと前に発表されたSpring Integration。これが、良い感じにCMMPです。このあたりを読んでみるとどんな感じか分かるかも。

ちょっとサンプルからコードを抜粋。
まず送り側

@MessageEndpoint(defaultOutput="quotes")
public class QuotePublisher {

    @Polled(period=300)
    public Quote getQuote() {
        BigDecimal price = new BigDecimal(new Random().nextDouble() * 100);
        return new Quote(generateTicker(), price.setScale(2, RoundingMode.HALF_EVEN));
    }

    private String generateTicker() {
        // randomly generates 3-letter tickers
    }
}

そして受け側

public class QuoteSubscriber {

    @Subscriber(channel="quotes")
    public void log(Object o) {
        System.out.println(o);
    }
}

アノテーションで送り側と受け側を結びつける感じです。面白いのは、WebBeansでは、イベントなんかをつかって送る値を決めているのですが、ここは戻り値。どちらが柔軟性があるか、どちらが分かりやすいかなどいろいろ考えるところがあると思います。このあたりの違いは、EnterpriseなIntegrationのServiceMixとMuleの違いに近いかな?このあたりはまた書きます。

さて、Spring Integrationも面白いのですが、CMMPとは言いませんが、ちょっとした変化が感じられる事例をもう一つSpring Frameworkから。これは、Spring MVCのコードなのですが、アノテーションによってちょっとづつ変化しています。

@Controller
@RequestMapping("/login.form")
public class LoginController {
//略
	@RequestMapping(method = RequestMethod.POST)
	public String processSubmit(@ModelAttribute("login") LoginBean login, BindingResult result, SessionStatus status) {
		loginValidator.validate(login, result);
		if (result.hasErrors()) {
			return "login";
		} else {
			if (loginService.login(login.getLoginname(), login.getPassword())) {
				login.setRealname("Test User");
				result.getModel().put("login", login);
				status.setComplete();
				return "success";
			} else {
				status.setComplete();
				return "fail";
			}
		}
	}
}

これは、Spring WebMVCのコントローラなのですが、POST後のハンドルメソッドに渡ってくる値が、今までだとObjectだったり、フレームワークが提供する何かしらのオブジェクトからgetしてキャストしてみたりしなければいけなかったのですが、引数にLoginBeanというこちらが欲しいJavaBeansが渡ってきたりするようになっています。これは、ページから受け取った値をコンテナが判断し、適切なメソッドを呼び出してくれる。

このあたりの流れが持ってくる変化は何か?今まではコンテナやフレームワークにあわせてデベロッパはプログラムしなければいけませんでしたが、コンテナやフレームワークがよりデベロッパの思考を妨げない方向に向かっているという事ではないでしょうか?