2008年 2月 28日 木曜日 |
OpenOffice.orgとNeoOfficeの色あい English Translation: (Yahoo!) / (Google)
前から気になっていたんですが、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も順調に大きくなってきました。でもなにもせず大きくなってくると失業問題とかで人が移住してしまいます。
産業を発展させたり、交通網を整備したりする必要があるようです。むずかしいですね。こういうのをやっていると昔はまっていた「A列車で行こう」というゲームを思い出します。ちょうどクオータービューだし。 MySQL買収完了 English Translation: (Yahoo!) / (Google) 英語のプレスリリースに出ていますが、MySQLの買収が完了したそうです。買収が発表されたのがひと月半ほど前のことですから、個人的にははやっ!という印象です。うーん、これもひとえに日本ではあんまりM&Aがないからそう思うだけなのでしょうか。それとも最近あまり新聞をまじめに読んでないからなのか・・・。
とりあえずMySQLの本を買ってきたのでそれを読み始めます。 USBハブマン English Translation: (Yahoo!) / (Google)
最近自宅にはペンタブやプリンタ、スキャナなどUSB機器が増えてきました。いままで机の周りがごちゃごちゃするのがいやで、USBハブを買うことは無かったのですが、自宅のMacBook ProはUSB 2ポート。そろそろさすがに足りなくなってきました。そこで、かれこれ半年ぐらい買おうか買うまいかを検討していましたが、このあいだGizmodoで紹介されていたDesign FactoryのUSB HUBMANというのを買いました。ノートPCの場合、絶対机の上にハブが載ることになるのでちょっとでもデザインに力を入れたものが欲しいですからね :-) Ricoh Caplio GX100とSIGMA DP1を比較してみる English Translation: (Yahoo!) / (Google) うちのチームのカメラ部部長は最近、SIGMA DP1(注:音が出るサイト)にたいそうメロメロなようで、センサーサイズやスペックなどをいろいろ比べていらっしゃいます。高すぎて、というかこれ以上カメラ要らないのでなるべく調べないようにしていますが(調べたら欲しくなるし!)、たまたまSIGMA DP1のサンプル写真とほぼ同じカットで自分でGX100でとった写真があることに気づきました。
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だときついかも。という印象。
でも同じぐらいの明るさに映っている青色のガラスを比べると、DP1の方(写真: 右)がつやつや感が全然違いますね。うーん。 補足:どちらの写真も露出補正は±0EVなんですが、ずいぶんと印象が違いますね。測光とか露出のプログラムにずいぶん違いがあるようです。個人的にはGX100のほうがやや鮮やかさを強調しすぎのような気がしますが、その場での印象とあまりずれは感じませんでした。 タタメット English Translation: (Yahoo!) / (Google)
たためるヘルメット、タタメット(Tatamet)、というのを買いました。周りからは何で買ったのか!?と、いろいろ聞かれましたが、用途は防災用で家に置いとこうと思っています。「備えあればうれしいな」というモチベーションです。防災用というと、いま準備してあるのは多少の水と、防災ラジオと、懐中電灯、食料が少し。あとは防塵マスクと防塵メガネです。 特に防塵マスクはわりと最初に備えました。一時期アスベスト問題が話題になったと思いますが、地震が起きていろいろ建物が倒壊したり、ひびが入ったりするとそういう有害な粉塵はたくさん充満するはず。食料や水もたくさん備えたいところですが、消費期限を考えると結構ちゃんと定期的に買い替えないといけないですね。うーん。 さて、今回買ったタタメットですが、飛来/落下物に対する保護帽の規格をパスした商品のようです。普通のヘルメットと違ってたためてコンパクト。ということがウリです。
たたんだときの厚みはだいたいキーボードと同じぐらい。
幅はキーボードよりちょっとコンパクトな感じ。
組み立てるとこういう風になります。組み立てる際、最初は壊れそうで心もとなくて、手こずります。なので、防災といういみでは手早く組み立てられるように何回か練習しておく必要がありそうです。 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の手続きとかは知らなくても大丈夫。
プロ意識 2008 English Translation: (Yahoo!) / (Google) このエントリは5年後と10年後の自分自身に向けたメッセージです。こんな公開されてる場を使って自分自身にメッセージを送るのもどうかと思いますが、まあ軽くスルーしてください(^^ゞ
5年後、10年後に忘れてそうならリマインドしてもらえるととても助かります。 「プロフェッショナル」という言葉に対して解釈はいろいろあると思いますが、今自分でその言葉を改めて定義するならば、自分の言葉で何かに対して言い切ることができるかどうか、がプロフェッショナルの境目だろうと考えています。最初にそれに気づいたのは、誰に教えてもらったときか覚えてませんが(汗)、プロの立場ならば「〜と思います」と言ってはならないという考え方を教わったときです。最近、高校時代や大学時代に作ったプログラムの仕様書や、課題の論文を読むとだいたい「〜と思います」論調だったので、この考え方を習ったのは就職してから以降であるということがわかりました。 では、この「〜思います」からせめて、「〜と考えます」などのように思いから考えにスタンスが変わった理由。 一つ目は覚悟。学生の頃と違い、お金をもらって、自分の考えを主張する。「〜思います」なんて軽い主張をすること自体、多くの場合失礼ではないか。最初は業種として、エンジニアだけに求められる特性かと考えていたけど、よく観察するとそれは営業でも、事務でも、経営者でもきっと同じ。やっぱりプロフェッショナル、ということを名乗る以上必要最低限。まあ、「〜思います」と、「〜考えます」とでどれぐらい責任感が違うのかと言われれば微妙なところですが、「〜思います」が主に相手に判断をゆだねているところに対して、「〜考えます」は自分で判断をしたり、かなり深いところまで踏み込んで提案しようとしています。 二つ目は自信。何の根拠もなく覚悟するのは単に自暴自棄なだけか、そもそもしっかりした自信ですらない。強がっているだけ。僕の場合、自信は何らかの根拠が必要。学生の頃は、本屋さんや図書館の本をあるテーマに対してひと棚まるごと読む、が自分の自信でした(あ、ちなみにちゃんと気に入った本は買いましたよ。それでも本屋さんにはずいぶんご迷惑をおかけしたことでしょうけど・・・)。この自信は結構もろくて、一日中、図書館に入り浸って本を全部読んだとしても別に全部を覚えられる訳でもないし、そもそも本のタイトルさえ覚えられない。それでも一通り読んだという達成感を根拠に自信が生まれてきました。今は紙の技術書を読むことはあまり多くありませんが、PDFのマニュアルやブログ、メーリングリストを「全部読む」(この全部、は自分である程度フィルタされたものですが)ことによって一定の自信を保っています。そう出なければJavaエバンジェリストのような仰々しい肩書きを名乗るのもちょっと気が引けます (^^ゞ 「プロフェッショナル」ということについて議論を深めていけばもっともっとたくさんの条件や、やりかた、考え方があるんだろうと思いますけどいまのところ自分の中で大事にしているのは以上の2つです(怠け癖が強いので、あまり多くを求めると逆に達成できないという実利上の判断もありますが・・・)。さて、これを読んだ5年後、10年後の自分がどう思うかとても楽しみです。同じテーマで5年前、10年前にメモを残しておけば面白かったのになあ。ゼロから始めるGlassFish入門第2回 English Translation: (Yahoo!) / (Google)
(・∀・)キムティ♪@荒浪一城さんによる「ゼロから始める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) Sun SPOTを借りてきました English Translation: (Yahoo!) / (Google)
最近仕事が山盛り気味なので、あまり遊んでいる暇はないんですが、今話題騒然なSun SPOTをお借りすることができました。こんなすばらしいおもちゃが手元にあったらはっきり言って仕事なんて進みませんよ・・・。あるいは睡眠時間を削るか・・・。 しかしながら問題は、電子回路の知識がまるで無いことです。Sun SPOTには加速度センサーとか温度センサーみたいな各種センサーがついているので、入力デバイスとして使うのも面白いんですが、やっぱりアナログ入出力ピンや、汎用入出力ピンに何か秋葉でデバイスを買ってきてつなげるのが真骨頂だと思います。うーん、そっち方面、勉強しようかどうか・・・。 ゼロから始めるGlassFish入門 English Translation: (Yahoo!) / (Google)
(・∀・)キムティ♪@荒浪一城さんよりGlassfishユーザ・グループ・ジャパンに寄稿していただいた記事ゼロから始めるGlassFish入門を公開しました。((・∀・)キムティ♪@荒浪一城さんありがとうございます。 ところで、Glassfishユーザ・グループ・ジャパンって呼び名が長いので、略称ですがグラスフィッシュジェーピーを略して「グラジェー」がいいと思っています。いかがでしょうか。 英辞郎を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時間弱かかります。まあ、お昼ごはんなどの時間帯に実行しておけばいいでしょう。そしてようやくできあがるとこんな感じで使えます。
辞書を追加したのでそれぞれの表示名は辞書のブランド名を使うように更新してあります。2〜3年前まではSONYの電子辞書を手元に置いて仕事してましたが、(調子が悪くなったということもありますが) 今ではほとんどこのDictionary.appだけで十分になりました。 |
Today's Page Hits: 999 |