Takayuki Okazaki's Weblog
ブログ: 岡崎 - Okazaki's blog
20080228 2008年 2月 28日 木曜日
OpenOffice.orgとNeoOfficeの色あい
English Translation: (Yahoo!) / (Google)
Colour comparison of Photoshop/OpenOffice 2.4m5/NeoOffice 2.2.2p11
前から気になっていたんですが、NeoOfficeを使ってプレゼンを作っていると写真の色合いがなんだかおかしいんです。カラープロファイルがごそっと削れているような感じ。まあ、印刷するときはプリンターがモノクロレーザーだしあんまり実害はなかったんですが、この間OpenOffice.org 2.4m5のMac/Aqua版を入れたのでこちらで試してみるとうまく色が出る事に気づきました。上図はそれぞれ比較したもので、左からPhotoshop CS3、OpenOffice.org 2.4m5、NeoOffice 2.2.2p11です。よく見るとPhotoshopとOOo 2.4m5も若干色の深みが違うような気がするんですが、まあ誤差の範囲として、NeoOfficeの色の落ち方はこう比べるとちょっと悲しいですね。OOo 2.4m5のMac/Aqua版も日本語が通るようになったのでそろそろこっちに乗り換えようかなあ。


MyMiniCityの続き
English Translation: (Yahoo!) / (Google)
blogs.sun.comでもちょっとしたブームのMyMiniCityですが、自分のMiniCityも順調に大きくなってきました。でもなにもせず大きくなってくると失業問題とかで人が移住してしまいます。
MyMiniCity - TAKAYUKI as of 2008.2.28
産業を発展させたり交通網を整備したりする必要があるようです。むずかしいですね。こういうのをやっていると昔はまっていた「A列車で行こう」というゲームを思い出します。ちょうどクオータービューだし。


MySQL買収完了
English Translation: (Yahoo!) / (Google)
英語のプレスリリースに出ていますが、MySQLの買収が完了したそうです。買収が発表されたのがひと月半ほど前のことですから、個人的にははやっ!という印象です。うーん、これもひとえに日本ではあんまりM&Aがないからそう思うだけなのでしょうか。それとも最近あまり新聞をまじめに読んでないからなのか・・・。
とりあえずMySQLの本を買ってきたのでそれを読み始めます。


20080227 2008年 2月 27日 水曜日
USBハブマン
English Translation: (Yahoo!) / (Google)
USB HUBMAN by Design Factory
最近自宅にはペンタブやプリンタ、スキャナなどUSB機器が増えてきました。いままで机の周りがごちゃごちゃするのがいやで、USBハブを買うことは無かったのですが、自宅のMacBook ProはUSB 2ポート。そろそろさすがに足りなくなってきました。そこで、かれこれ半年ぐらい買おうか買うまいかを検討していましたが、このあいだGizmodoで紹介されていたDesign FactoryのUSB HUBMANというのを買いました。ノートPCの場合、絶対机の上にハブが載ることになるのでちょっとでもデザインに力を入れたものが欲しいですからね :-)


20080226 2008年 2月 26日 火曜日
Ricoh Caplio GX100とSIGMA DP1を比較してみる
English Translation: (Yahoo!) / (Google)
うちのチームのカメラ部部長は最近、SIGMA DP1(注:音が出るサイト)にたいそうメロメロなようで、センサーサイズやスペックなどをいろいろ比べていらっしゃいます。高すぎて、というかこれ以上カメラ要らないのでなるべく調べないようにしていますが(調べたら欲しくなるし!)、たまたまSIGMA DP1のサンプル写真とほぼ同じカットで自分でGX100でとった写真があることに気づきました。
R0020387.JPG
Ricoh Caplio GX100, f/2.5, シャッター速度 1/9秒, 焦点距離 5.1mm(35ミリ換算時 24mm), ISO 80, 測光方式: 分割測光, ホワイトバランス: オート, 絞り優先オート
これとほぼ同じ場所で撮影されたSIGMA DP1のサンプル写真がこちら
EXIF情報によるとこの写真は、
f/4, シャッター速度 1/15秒, 焦点距離 16.6mm (35ミリ換算時 28mm), ISO 800, 測光方式: 分割測光, ホワイトバランス: オート
とのことです。自分でとったGX100のやつは拡大してみるとちょっとぶれてます。撮影者の腕とか撮影の条件がもろもろいっしょではないので直接比べるのは難しいところですが、明るさは同じホテルの中なのでそれほど変わらないと思います。同じぐらいの明るさで、ISO 80 vs. ISO 800だとするならばやっぱりf/4だときついかも。という印象。
Ricoh GX100 vs. SIGMA DP1
でも同じぐらいの明るさに映っている青色のガラスを比べると、DP1の方(写真: 右)がつやつや感が全然違いますね。うーん。
補足:どちらの写真も露出補正は±0EVなんですが、ずいぶんと印象が違いますね。測光とか露出のプログラムにずいぶん違いがあるようです。個人的にはGX100のほうがやや鮮やかさを強調しすぎのような気がしますが、その場での印象とあまりずれは感じませんでした。


20080225 2008年 2月 25日 月曜日
タタメット
English Translation: (Yahoo!) / (Google)
R0024565
たためるヘルメット、タタメット(Tatamet)、というのを買いました。周りからは何で買ったのか!?と、いろいろ聞かれましたが、用途は防災用で家に置いとこうと思っています。「備えあればうれしいな」というモチベーションです。防災用というと、いま準備してあるのは多少の水と、防災ラジオと、懐中電灯、食料が少し。あとは防塵マスクと防塵メガネです。
特に防塵マスクはわりと最初に備えました。一時期アスベスト問題が話題になったと思いますが、地震が起きていろいろ建物が倒壊したり、ひびが入ったりするとそういう有害な粉塵はたくさん充満するはず。食料や水もたくさん備えたいところですが、消費期限を考えると結構ちゃんと定期的に買い替えないといけないですね。うーん。
さて、今回買ったタタメットですが、飛来/落下物に対する保護帽の規格をパスした商品のようです。普通のヘルメットと違ってたためてコンパクト。ということがウリです。
R0024567
たたんだときの厚みはだいたいキーボードと同じぐらい。
R0024569
幅はキーボードよりちょっとコンパクトな感じ。
R0024571
組み立てるとこういう風になります。組み立てる際、最初は壊れそうで心もとなくて、手こずります。なので、防災といういみでは手早く組み立てられるように何回か練習しておく必要がありそうです。


JRubyでJMX
English Translation: (Yahoo!) / (Google)
ずいぶん前の話ですが、IdMセミナーより: Identity ManagerをJMXで監視するというエントリでJMXによるアプリケーションサーバ監視をJRubyからやる。というのをご紹介しました。そのときに、JRuby開発者Thomas Eneboにこんなモジュールを作ってもらいました。ずっと前から紹介しようと思っていたのに、今頃気づきました・・・。すいません・・・。
include Java

import javax.management.DynamicMBean
import javax.management.MBeanInfo
import javax.management.ObjectName
import javax.management.remote.JMXServiceURL
import javax.management.remote.JMXConnectorServerFactory

module JMX
  class MBeanServerConnector
    def initialize(location, server)
      @url = JMXServiceURL.new location
      @server = JMXConnectorServerFactory.newJMXConnectorServer @url, nil, server.server

      if block_given?
    start; yield; stop
      end
    end

    def active?; @server.isActive; end
    def start; @server.start; end
    def stop; @server.stop if active?; end
  end

  # Represents both MBeanServer and MBeanServerConnection
  class MBeanServer
    import javax.management.remote.JMXConnectorFactory
    import javax.management.MBeanServerFactory
    import javax.management.Attribute

    attr_accessor :server
    @@classes = {}

    def initialize(location=nil, username=nil, password=nil)
      if (location)
    url = JMXServiceURL.new location
        if (username)
          credentials = java.lang.String[2].new
          credentials[0], credentials[1] = username, password
          env = {"jmx.remote.credentials" => credentials}
        else
          env = nil
        end
    @server =JMXConnectorFactory.connect(url, env).getMBeanServerConnection
      else
    @server = MBeanServerFactory.createMBeanServer
      end
    end

    def get_mbean(object_name)
      name = ObjectName.new object_name

      raise NoSuchBeanError.new("No name: #{object_name}") unless @server.isRegistered(name)
      @server.getObjectInstance name
      generate_proxy(name)
    end

    def create_mbean(class_name, object_name)
      name = ObjectName.new object_name
      @server.createMBean class_name, name, nil, nil
      generate_proxy(name)
    end

    def default_domain; @server.getDefaultDomain; end
    def domains; @server.domains; end
    def mbean_count; @server.getMBeanCount; end

    def query_names(name=nil, query=nil)
      name = ObjectName.new name
      @server.queryNames(name, query)
    end

    def register_mbean(object, object_name)
      name = ObjectName.new object_name

      @server.registerMBean(object, name)
      generate_proxy(name)
    end

    def generate_proxy(object_name)
      info = @server.getMBeanInfo object_name
      class_name = info.className

      return @@classes[class_name].new if @@classes[class_name]

      # Make local so closure capturage.
      server = @server
      proxy = Class.new
      # Attributes are supported using aref/aset syntax
      proxy.class_eval do
        define_method(:[]) do |name|
          server.getAttribute object_name, name
        end

        define_method(:[]=) do |name, value|
          server.setAttribute object_name, Attribute.new(attr.name, value)
        end
      end

      # Operations get method names (collision potential)
      info.operations.each do |op|     proxy.class_eval do
      define_method(op.name) do |*args|
        args_array = JMX::MBeanServer.args_array(args)
        signature_array = JMX::MBeanServer.signature_array(args_array)
        server.invoke object_name, op.name, args_array, signature_array
      end
    end
      end

      # Add notification listener methods
      proxy.class_eval do
    define_method(:add_notification_listener) do |listener,*rest|
      filter, handback = *rest
      server.addNotificationListener object_name, listener, filter, handback
    end

    define_method(:remove_notification_listener) do |listener|
      server.removeNotificationListener object_name, listener
    end

    define_method(:method_missing) do |method_name, *args|
      args_array = JMX::MBeanServer.args_array(args)
      signature_array = JMX::MBeanServer.signature_array(args_array)
      server.invoke object_name, method_name.to_s, args_array, signature_array
    end
      end

      @@classes[info.className] = proxy

      proxy.new
    end

    class << self
      def args_array(params)
    return nil if params.nil?

    array = java.lang.String[params.length].new
    params.each_with_index { |parm, i| array[i] = parm }

    array
      end

      def signature_array(params)
    return nil if params.nil?

    array = java.lang.String[params.length].new
    params.each_with_index do |parm, i|       array[i] = Java.ruby_to_java(parm).java_class.name
    end
    array
      end
    end
  end

  class NoSuchBeanError < RuntimeError
  end
end

class RubyDynamicMBean   import DynamicMBean

  def initialize(name, description)
    @info = MBeanInfo.new name, description, nil, nil, nil, nil
    @name, @description = name, description
  end

  def getAttribute(attribute); $stderr.puts "getAttribute"; end
  def getAttributes(attributes); $stderr.puts "getAttributes"; end
  def getMBeanInfo; $stderr.puts "getMBeanInfo"; @info; end
  def invoke(actionName, params=nil, signature=nil);     send(actionName, *params)
  end
  def setAttribute(attribute); $stderr.puts "setAttribute"; end
  def setAttributes(attributes); $stderr.puts "setAttributes";  end
  def to_s; "#@name: #@description"; end
  def inspect; "#@name: #@description"; end
  def toString; "#@name: #@description"; end
end
これを使うと、JRubyからJMXを使うときにこんな感じでプログラムを書けます。
require 'jmx'

username = "admin"
password = "adminadmin"
url      = "service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi"
server   = JMX::MBeanServer.new url, username, password
listener = server.get_mbean "com.sun.appserv:name=server,type=virtual-server,category=monitor,server=server"

puts "Server started at: #{Time.new(listener["hosts-starttime"])}"
こんな感じで、ほんの数行。JMXの手続きとかは知らなくても大丈夫。


20080224 2008年 2月 24日 日曜日
プロ意識 2008
English Translation: (Yahoo!) / (Google)
このエントリは5年後と10年後の自分自身に向けたメッセージです。こんな公開されてる場を使って自分自身にメッセージを送るのもどうかと思いますが、まあ軽くスルーしてください(^^ゞ
5年後、10年後に忘れてそうならリマインドしてもらえるととても助かります。


「プロフェッショナル」という言葉に対して解釈はいろいろあると思いますが、今自分でその言葉を改めて定義するならば、自分の言葉で何かに対して言い切ることができるかどうか、がプロフェッショナルの境目だろうと考えています。最初にそれに気づいたのは、誰に教えてもらったときか覚えてませんが(汗)、プロの立場ならば「〜と思います」と言ってはならないという考え方を教わったときです。最近、高校時代や大学時代に作ったプログラムの仕様書や、課題の論文を読むとだいたい「〜と思います」論調だったので、この考え方を習ったのは就職してから以降であるということがわかりました。
では、この「〜思います」からせめて、「〜と考えます」などのように思いから考えにスタンスが変わった理由。

一つ目は覚悟。学生の頃と違い、お金をもらって、自分の考えを主張する。「〜思います」なんて軽い主張をすること自体、多くの場合失礼ではないか。最初は業種として、エンジニアだけに求められる特性かと考えていたけど、よく観察するとそれは営業でも、事務でも、経営者でもきっと同じ。やっぱりプロフェッショナル、ということを名乗る以上必要最低限。まあ、「〜思います」と、「〜考えます」とでどれぐらい責任感が違うのかと言われれば微妙なところですが、「〜思います」が主に相手に判断をゆだねているところに対して、「〜考えます」は自分で判断をしたり、かなり深いところまで踏み込んで提案しようとしています。

二つ目は自信。何の根拠もなく覚悟するのは単に自暴自棄なだけか、そもそもしっかりした自信ですらない。強がっているだけ。僕の場合、自信は何らかの根拠が必要。学生の頃は、本屋さんや図書館の本をあるテーマに対してひと棚まるごと読む、が自分の自信でした(あ、ちなみにちゃんと気に入った本は買いましたよ。それでも本屋さんにはずいぶんご迷惑をおかけしたことでしょうけど・・・)。この自信は結構もろくて、一日中、図書館に入り浸って本を全部読んだとしても別に全部を覚えられる訳でもないし、そもそも本のタイトルさえ覚えられない。それでも一通り読んだという達成感を根拠に自信が生まれてきました。今は紙の技術書を読むことはあまり多くありませんが、PDFのマニュアルやブログ、メーリングリストを「全部読む」(この全部、は自分である程度フィルタされたものですが)ことによって一定の自信を保っています。そう出なければJavaエバンジェリストのような仰々しい肩書きを名乗るのもちょっと気が引けます (^^ゞ

「プロフェッショナル」ということについて議論を深めていけばもっともっとたくさんの条件や、やりかた、考え方があるんだろうと思いますけどいまのところ自分の中で大事にしているのは以上の2つです(怠け癖が強いので、あまり多くを求めると逆に達成できないという実利上の判断もありますが・・・)。さて、これを読んだ5年後、10年後の自分がどう思うかとても楽しみです。同じテーマで5年前、10年前にメモを残しておけば面白かったのになあ。


20080223 2008年 2月 23日 土曜日
ゼロから始めるGlassFish入門第2回
English Translation: (Yahoo!) / (Google)
ゼロから始めるGlassFish入門第2回
(・∀・)キムティ♪@荒浪一城さんによる「ゼロから始めるGlassFish入門」シリーズの最終回、第2回: JavaPetStoreで体験するJava EE 5のテクノロジーをアップロードしました。キムティさん寄稿いただきありがとうございました!


TomcatからGlassFishへのマイグレーションワークショップの資料(英語)
English Translation: (Yahoo!) / (Google)
いつものようにblogs.sun.comのエントリ全読みしていたら、表題のようなTomcatからGlassFish v2へマイグレーションをしよう!というようなワークショップの資料が公開されているのに気づきました。 エントリの中身はドイツ語のようなので今ひとつわかりませんが、ワークショップの資料自体はSun ISVエンジニアリングチームによる英語の資料でした。資料を見てみると、結構網羅的にいろいろまとめられていて、これ、是非日本語訳したいな〜、なんて思う資料です。暇があったら翻訳の許可をお願いして日本語訳してみたいところです。 プレゼン資料もワークショップ資料も、けっこうカバーしている内容が広いにもかかわらずコンパクトにまとまっています。すごーい!


ところでblogs.sun.comを全読みしていると英語の記事もあれば、ドイツ語もあり、韓国語、中国語、ロシア語、イタリア語などなど本当に様々な国の方々がブログをかかれていることに気づきます。まあ、読めるのは日本語と英語ぐらいなんですが、たまにタイトルとかでビビっときたやつは中身もがんばって類推しようと試みるんですが、珍しく今回はいい発見でした。ちなみにGoogle Readerさん曰く、blogs.sun.comに投稿されるエントリは107.1エントリ/日のようです。言語別の統計も出たらおもしろいのになあ。


GlassFish v3 Tech Preview 2マイルストーン2
English Translation: (Yahoo!) / (Google)
GlassFish v3のテクノロジープレビュー2の、マイルストーン2が出たようです。インストールは簡単。glassfish-v3-preview2-b02.zipをダウンロードして展開する、展開したディレクトリ glassfish以下の binにパスを通す。この2ステップです。起動するには次のようにasadminコマンドを使います。
$ ./asadmin start-domain
2008/02/23 16:31:44 com.sun.enterprise.v3.server.AppServerStartup run
情報: HK2 initialized in 892 ms
2008/02/23 16:31:45 com.sun.enterprise.v3.services.impl.GrizzlyProxy start
情報: Listening on port 8080
2008/02/23 16:31:45 com.sun.enterprise.v3.services.impl.GrizzlyProxy start
情報: Listening on port 8181
2008/02/23 16:31:45 com.sun.enterprise.v3.services.impl.GrizzlyProxy start
情報: Listening on port 4848
2008/02/23 16:31:46 com.sun.enterprise.v3.server.AppServerStartup run
情報: Glassfish v3 started in 2796 ms
以前は glassfish/config/asenv.confファイルに絶対パスでGlassFishのインストールパスが記述されていたためインストール手順や、設置場所を移動した場合に少し面倒でしたが、今回はどうやら全部相対パスに書き換えられているのでTomcatと同じような感覚で使えそうです。 ちなみにポート4848の管理コンソール用のリスナはデフォルトで立ち上がるようですが、管理GUIがデプロイされていないので、今のところアプリケーションのデプロイなどはasadminコマンドを使います。
$ ./asadmin deploy ~/hello.war 
SUCCESS : hello deployed successfully
properties=(name=hello)


3週間目のMyMiniCity
English Translation: (Yahoo!) / (Google)
MyMinicity - TAKAYUKI as of 2008.2.23
MyMinicityですが前からちょっとずつ発展してきました。


20080222 2008年 2月 22日 金曜日
Sun SPOTを借りてきました
English Translation: (Yahoo!) / (Google)
Sun SPOT
最近仕事が山盛り気味なので、あまり遊んでいる暇はないんですが、今話題騒然なSun SPOTをお借りすることができました。こんなすばらしいおもちゃが手元にあったらはっきり言って仕事なんて進みませんよ・・・。あるいは睡眠時間を削るか・・・。
しかしながら問題は、電子回路の知識がまるで無いことです。Sun SPOTには加速度センサーとか温度センサーみたいな各種センサーがついているので、入力デバイスとして使うのも面白いんですが、やっぱりアナログ入出力ピンや、汎用入出力ピンに何か秋葉でデバイスを買ってきてつなげるのが真骨頂だと思います。うーん、そっち方面、勉強しようかどうか・・・。


20080214 2008年 2月 14日 木曜日
ゼロから始めるGlassFish入門
English Translation: (Yahoo!) / (Google)
ゼロから始めるGlassFish入門
(・∀・)キムティ♪@荒浪一城さんよりGlassfishユーザ・グループ・ジャパンに寄稿していただいた記事ゼロから始めるGlassFish入門を公開しました。((・∀・)キムティ♪@荒浪一城さんありがとうございます。

ところで、Glassfishユーザ・グループ・ジャパンって呼び名が長いので、略称ですがグラスフィッシュジェーピーを略して「グラジェー」がいいと思っています。いかがでしょうか。


20080213 2008年 2月 13日 水曜日
英辞郎をDictionary.appで (Mac)
English Translation: (Yahoo!) / (Google)
Mac OS Xには購入時から辞書アプリがついていて、以前はOxfordの英英辞典、類語辞典だけでしたが、Leopardからはプログレッシブ英和/和英中辞典、大辞泉、類語例解辞典、Apple用語辞典、Wikipediaなど辞書が一気に増えました。普段はこれで十分なんですが、ブログを読んだりあるいはドキュメントの翻訳/レビューをするとなると複数の辞書を参照したくなります。以前から、アルクの英辞郎 on the Webを使っていましたが、Web経由だとWikipediaもそうですが若干の待ち時間が気になっていました。また、Dictionary.appという辞書アプリはインクリメンタルサーチに対応していたり、もしかして、機能を備えているので単にレイテンシだけの問題だけではなく入力支援の点でも優れています。
そこでようやく重い腰を上げて英辞郎をDictionary.appに組み込むことにしました。Dictionary.appのSDKがあることは前から知っていましたが、調べてみるとすでに先人がいらっしゃって今回はそのRubyスクリプトを利用させていただきました。Leopardの「辞書」アプリで「英辞郎」を使う(binWord/blog)
英辞郎の辞書データはオンラインで購入できますが、Windowsの自己解凍形式でのダウンロードのみになっています。Macだと・・・。と思いますが、StuffIt Expanderを使えばアッサリ解凍できるのでそれを使って解凍します。Dictionary.app用の辞書に変換するのに手元のMacBook (Core 2 Duo, 3GB RAM)でも1時間弱かかります。まあ、お昼ごはんなどの時間帯に実行しておけばいいでしょう。そしてようやくできあがるとこんな感じで使えます。
Eijiro into Dictionary.app
辞書を追加したのでそれぞれの表示名は辞書のブランド名を使うように更新してあります。2〜3年前まではSONYの電子辞書を手元に置いて仕事してましたが、(調子が悪くなったということもありますが) 今ではほとんどこのDictionary.appだけで十分になりました。


過去の記事
« 1月 2008 »
     
1
2
4
8
9
11
12
15
16
17
18
19
20
21
29
 
       
今日
Click me to subscribe このブログを購読(RSS)
検索

このブログ著者について
ソフトウエア・インフラストラクチャー・ソリューション本部のソリューション・アーキテクトでした(2008年8月退職)。 本業はSOAソリューションならびにSun Java CAPSによるソリューションのプリセールスをお手伝いするエンジニア、とJavaエバンジェリストグループに参加してセミナーに行ったり、趣味のプログラミング・ネタをこのブログで紹介したりしていました。現在は、ふらふらとwatermint.orgで活動中〜。
リンク
 
SunホットトピックPodcast - SunホットトピックPodcast
 


 

Today's Page Hits: 999