投稿者「toricky6」のアーカイブ

エンジニアとしての生き方

エンジニアとしての生き方  IT技術者たちよ、世界へ出よう! (インプレス選書)

著名なブロガー・プログラマー中島聡氏の著作。中島氏の存在を知ったのは、たまたま会社の先輩のブログからリンクを見つけてのもの。その時のエントリーはあまり興味を引かなかったのだが、他のエントリーを見るに連れて、徐々に引きこまれていき、今では、心の師なる存在。

SIerという業界で働いていると、そもそもエンジニアという存在が異質なものなのでストレスを感じる部分も多いが、自分がそもそも信じているエンジニア像、技術に非常に長けて、企画・センスもあるというキャリアイメージを具現化してくれる存在。

学生時代に大学の学術情報センターでアルバイトした経験から言うと、大学規模のシステムでも管理者は20人弱。20人で学内の数百台のPCをの管理から、学内外のネットワーク、ファイルサーバ含めて管理していた。外注も一切なしで、(と言っても、ハードの初期セットアップは委託していたが)、事務所にはオライリーが山ほど並んでいる。ICカードからプリントするシステムが2001年時点で内製で運用していたり、ブートローダーも作ってしまう。

そんな環境を見るに、プログラマとしては到底活躍できないだろうと思い、SIerという少し業務寄りなところへ就職したつもりだったが、方やプログラミング言語を大して知らない1~2年目が動くものを書いてしまうエンタープライズな開発に愕然としたことも思い出す。それでも、それじゃいかんと思い、技術書を漁ったりもしたが、やはり、仕事上そこまで求められるケースはほぼ無く、ギャップに悩む事も多い。ただ、SIer、SEに関する以下の記述になるほどなと思わされるし、進むべき方向を暗に照らしているようにも感じる。

私の理解では、SEという職業はレストランに例えればウェイターである。それも、メニューから料理を選んでもらう通常のレストランとは異なり、「客の注文するものなら何でも作る」という個別注文レストランである。

そんなレストランであるから、客の注文もさまざまである。「豚のしょうが焼き定食」と料理を指定する客もいれば、「今が旬の魚を使った寿司」とか、「ご飯のおかずになるものなら何でもいいけど、コレステロールが気になるから野菜を多くしてね」という漠然とした注文も来る。ウェイターの役目はそれぞれのお客さんに満足してもらうには、何を作るのが一番良いのかを見極めて、キッチンに伝えることである。

難しいのは、客が必ずしも料理に詳しくはないので、真夏に「生牡蠣が食べたい」などと無理を言って来る客がいることである。そこを相手の自尊心を傷つけずに、「お客様、今は8月なのであいにく生食に適した牡蠣がございません。牡蠣フライではいかがでしょう」などと客を説得しなければならない。そういった仕事をちゃんとせずに、「生牡蠣一人前!」とキッチンに伝えてしまうと、料理人たちからは、「あのウェイターは料理のことが分かっていない」と非難されてしまう。

優秀なウェイターになると、客の好みや健康状態、季節の食材、キッチンにいる料理人の得意料理、各料理にかかる時間、食材のコスト、などが全て頭に入っているために、客にも喜んでもらえるし、キッチンからは信頼される。そんなレストランの客席はいつも満足げな客で一杯だ。

これが私の理解する「SEの役目」である。客に満足したソフトウェアを提供するという意味で、SEという職業はものすごく重要ある。ソフトウェアエンジニアとどちらが上か、などということは決してなく、それぞれに「客が何を本当に必要としているのか見つけ出す」、「受けた注文に基づいて作る」というそれぞれに重要な役割を果たすだけのことである。

会社ではやれ鉄人など、技術マニアなど、といった呼ばれ方をするが、世間を教えてくれる名著。願わくばもっと前に出会いたかった本。これも殿堂入り。

うちの部員にも読んでもらいたい。。。

Java5、GoogleカレンダーAPI独り言

久々にコーディングしての気づき。

StringTokenizerは非推奨

StringTokenizer は、互換性を維持する目的で保持されているレガシークラスであり、新規コードでは使用が推奨されていません。この機能の使用を考えているなら、String の split メソッドまたは java.util.regex パッケージを代わりに使用することをお勧めします。

次の例は、String.split メソッドを使用して文字列を基本的なトークンに分割する方法を示します。

 String[] result = "this is a test".split("\\s");

for (int x=0; x<result.length; x++)

System.out.println(result[x]);

知らなかった。

拡張for文(for/inステートメント)を使ってみた。コードは気持ち短くなった。

public class ScheduleBoardScheduleList {

private List<ScheduleBoardSchedule> scheduleBoardScheduleList;

public ScheduleBoardScheduleList(){

scheduleBoardScheduleList = new ArrayList<ScheduleBoardSchedule>();

}

public void addScheduleBoardScheduleList(ScheduleBoardSchedule sbs){

scheduleBoardScheduleList.add(sbs);

}

public List<ScheduleBoardSchedule> getscheduleBoardScheduleList(){

return scheduleBoardScheduleList;

}

@Override

public String toString() {

StringBuffer sb = new StringBuffer();

for(ScheduleBoardSchedule sbs : scheduleBoardScheduleList){

sb.append(sbs.toString());

}

return sb.toString();

}

}

アノテーションの使い勝手はまだ試せていないので分からない。

com.google.gdata.data.calendar.CalendarEventEntry#setQuickAdd

良く分からないが、trueとしてしまうと、時刻指定ができない模様。サンプロコードを見るかぎりは、

eventContent = new String("Tennis with John April 11 3pm-3:30pm")

としておいて、

myEntry.setContent(new PlainTextConstruct(eventContent));

myEntry.setQuickAdd(true);

で直近の該当時刻にスケジュールを登録されていた。日付を5/11のように指定すると日付は正しく反映されるが

時刻は反映されない。ただし、JavaDocを見ても良く解らんが、どうも日本では未公開の機能のようなので

突っ込まないこととした。。

set whether gd:content is quickadd info This will only effects Insert semantics.

Googleカレンダーで遊ぶ

会社で使っているスケジュールボードをリモートからも見たくてGoogleカレンダーと同期できないか思案してのPG。

久々なので、Eclipse3.6の環境をきれいにクリーンインストールしてからスタート。

まずは、GDateのサンプルをダウンロード。Eclipseで新規Javaプロジェクトを構築して解凍した一式を配置。

ただ、J2EEライブラリへのパスが無かったので、 GlassFishのライブラリを追加。最初は該当JARを探すも、

1.windows>設定>サーバ>ランタイム環境より、追加でJ2EEコンテナを追加

2.プロジェクトのビルドパスに ライブラリの追加>サーバ・ランタイムを行う

で適当なライブラリを追加してくれるので、コンパイルは通るようになる。

今回動かしたいカレンダーのサンプルのREADME.txtを見ると

The application can be built and run using the provided Ant build file found at

gdata/java/build.xml. The sample can be run in the following manner:

1. Edit gdata/java/build.properties to enter your Google Account username and

password, as well as the feed URI on which you want to test the sample.

2. Invoke the sample using the following commandline:

ant -f gdata/java/build.xml sample.calendar.run

とあるので、gdate直下(今回はプロジェクト直下)にbuild-samplesスクリプトは以下の、build.propertiesをコピーして、build.samples.xmlのsample.calendar.runを実効

すると

Buildfile: C:\Users\jun\workspace\GoogleCalenderSample\build-samples.xml

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

sample.calendar.build:

sample.calendar.run:

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

sample.calendar.build:

sample.calendar.eventfeed.run:

[java] java.lang.NoClassDefFoundError: sample/calendar/EventFeedDemo

[java] Caused by: java.lang.ClassNotFoundException: sample.calendar.EventFeedDemo

[java] at java.net.URLClassLoader$1.run(Unknown Source)

[java] at java.security.AccessController.doPrivileged(Native Method)

[java] at java.net.URLClassLoader.findClass(Unknown Source)

[java] at java.lang.ClassLoader.loadClass(Unknown Source)

[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

[java] at java.lang.ClassLoader.loadClass(Unknown Source)

[java] Could not find the main class: sample.calendar.EventFeedDemo. Program will exit.

[java] Exception in thread "main"

[java] Java Result: 1

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

sample.calendar.build:

sample.calendar.calendarfeed.run:

[java] java.lang.NoClassDefFoundError: sample/calendar/CalendarFeedDemo

[java] Caused by: java.lang.ClassNotFoundException: sample.calendar.CalendarFeedDemo

[java] at java.net.URLClassLoader$1.run(Unknown Source)

[java] at java.security.AccessController.doPrivileged(Native Method)

[java] at java.net.URLClassLoader.findClass(Unknown Source)

[java] at java.lang.ClassLoader.loadClass(Unknown Source)

[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

[java] at java.lang.ClassLoader.loadClass(Unknown Source)

[java] Could not find the main class: sample.calendar.CalendarFeedDemo. Program will exit.

[java] Exception in thread "main"

[java] Java Result: 1

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

sample.calendar.build:

sample.calendar.aclfeed.run:

[java] java.lang.NoClassDefFoundError: sample/calendar/AclFeedDemo

[java] Caused by: java.lang.ClassNotFoundException: sample.calendar.AclFeedDemo

[java] at java.net.URLClassLoader$1.run(Unknown Source)

[java] at java.security.AccessController.doPrivileged(Native Method)

[java] at java.net.URLClassLoader.findClass(Unknown Source)

[java] at java.lang.ClassLoader.loadClass(Unknown Source)

[java] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

[java] at java.lang.ClassLoader.loadClass(Unknown Source)

[java] Could not find the main class: sample.calendar.AclFeedDemo. Program will exit.

[java] Exception in thread "main"

[java] Java Result: 1

BUILD SUCCESSFUL

Total time: 1 second

と出る。解凍したパッケージを適切にプロジェクトに配置できていなかったので修正して実施。

(SRCフォルダと、build.xmlの関係が不適切だった)

Buildfile: C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples.xml

sample.appsforyourdomain.dependencies:

template.require.service.jar:

BUILD FAILED

C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples\appsforyourdomain.xml:40: The following error occurred while executing this line:

C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples\core.xml:61: Missing dependency jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples/..//lib/gdata-appsforyourdomain-${appsforyourdomain.spec.version}.jar

Please run "ant appsforyourdomain.build.appsforyourdomain".

Total time: 322 milliseconds

今度は、version.propertiesを適当なフォルダに置けていなかった。

配置を修正してひとまず、サンプルは動いた。でも、内部エラーも出ている。今日はひとまずここまで。

Buildfile: C:\Users\jun\workspace\GoogleCalendarTest\gdate\build-samples.xml

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes

[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。

[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar

sample.calendar.build:

[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes

[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。

[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。

sample.calendar.build:

[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar

sample.calendar.run:

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes

[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。

[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar

sample.calendar.build:

[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes

sample.calendar.eventfeed.run:

[java] Your calendars:

[java]

[java] ��{�̏j��

[java] Printing all events

[java] All events on your calendar:

[java] test

[java] Full text query

[java] Events matching Tennis:

[java] Events from 2007-01-05 to 2007-01-07:

[java] Successfully created event Tennis with Mike

[java] Successfully created quick add event Tennis with John April 1

[java] Successfully created web content event World Cup

[java] Successfully created recurring event Tennis with Dan

[java] Event's new title is "Important meeting".

[java] Set a 15 minute EMAIL reminder for the event.

[java] Successfully deleted all events via batch request.

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes

[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。

[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar

sample.calendar.build:

[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar

sample.calendar.calendarfeed.run:

[java] Calendars in metafeed

[java]

[java] ��{�̏j��

[java] Calendars in allcalendars feed

[java]

[java] ��{�̏j��

[java] Calendars in owncalendars feed

[java]

[java] Creating a secondary calendar

[java] Updating the secondary calendar

[java] Deleting the secondary calendar

[java] The server had a problem handling your request.

[java] com.google.gdata.util.ServiceException: Internal Server Error

[java] Internal Error

[java] at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:624)

[java] at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)

[java] at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552)

[java] at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)

[java] at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)

[java] at com.google.gdata.client.Service.delete(Service.java:1738)

[java] at com.google.gdata.client.GoogleService.delete(GoogleService.java:699)

[java] at com.google.gdata.data.BaseEntry.delete(BaseEntry.java:669)

[java] at sample.calendar.CalendarFeedDemo.deleteCalendar(CalendarFeedDemo.java:173)

[java] at sample.calendar.CalendarFeedDemo.main(CalendarFeedDemo.java:277)

sample.calendar.dependencies:

template.require.service.jar:

sample.core.dependencies:

core.sample.core.util.build:

[javac] Compiling 2 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\classes

[javac] 注:C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\CommonUtils.java は推奨されない API を使用またはオーバーライドしています。

[javac] 注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\util\lib\sample-util.jar

sample.calendar.build:

[javac] Compiling 4 source files to C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\classes

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\EventFeedPartialDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\CalendarFeedDemo.jar

[jar] Building jar: C:\Users\jun\workspace\GoogleCalendarTest\gdate\sample\calendar\lib\AclFeedDemo.jar

sample.calendar.aclfeed.run:

[java] Access control lists for your calendars:

[java] Calendar "":

[java] Scope: Type=USER ()

[java] Role: http://schemas.google.com/gCal/2005#owner

BUILD SUCCESSFUL

Total time: 21 seconds

 

PS:Eclipse3.6でAnt使ったが、Taskへのリンク機能が超便利。また、外部ファイルをproperty file属性で読み込んでいるのも知らないテクなので関心。Googleのサンプルでは、JARファイルのバージョンをversion.xmlとして外出しにして、指定したバージョンのファイルを取得する作りとなっていた。Eclipseプロジェクトのビルドパスが動的に指定出来れば良い手として使えそう。

大局観

大局観 自分と闘って負けない心 (角川oneテーマ21)

決断力以来の2年半ぶりの羽生さん本。決断力は将棋を通して語られる、洞察の深さ、また将棋に留まらない業種の交流に心酔したものでした。

で、この一冊。

SE35歳定年説を吹き飛ばしてくれる下記の記述に心を奪われた。

がむしゃらに読み込む力は、年齢が若い棋士が上だが、熟年になると、この「大局観」で逆に「読まない心境」となり、勝負の上で若い棋士とも互角に闘える。

若い棋士は、良い手も悪い手も、たくさんの可能性を探しがちだが、ベテランになればなるほど、僅かな候補に絞って熟考を重ねるようにもなるらしく、捨てる技術が増すとか。そして、その捨てる技術を負けた後に如何に見直し修正できるかが、棋士の違いになるとも。

将棋のプロの世界はA級は10名しか存在せず、他のスポーツと比べても極端に年齢層が広い。そんな中、長期に渡り第一線で活躍した人の言葉は非常に重たいし、共感を生む。

本を読んでいると、そのうち書けるのではと思わせられるような本もあるけれども(と、言っても書けるような内容ではないのだが)、いくら経っても辿りつけないような境地に感じさせられてしまう、この本は、殿堂入り。

ゴールドマン・サックス研究

前回の更新が開いてしまいましたが、読むのが止まったのではなく、書く時間が確保できなかったためm(–)m。また、こつこつと更新していきたいと思います。と、いうことで、1.5ヶ月ぶりの一冊はこちらから。

ゴールドマン・サックス研究 (文春新書)

買ってから2ヶ月くらい寝かせてしまっていたのだが、タイトルが気になり購入。仕事的には投資銀行なんぞ無縁なんだが。。。

1980年代までの投資銀行と、現在の投資銀行は違う!という事が書かれており、そうなんだ、と思わされる。リーマンショックを契機として出版される本を見る限り、銀行の強欲っぷりは眼に余るところはあるけれども、その契機はゴールドマン・サックスゴールドマン・サックスたら占めていた、創業家からの流れが途切れた事にある、との記述を読むと、ソニーを思い起こさせる。

また投資銀行家だった著者が、強欲主義な金融に嫌気もさし、本来の実業を重視するよう投資家になっていった事が読み取るに、学生時代にどうしても金融が好きになれなかった自分の姿も思い起こされた。

デトロイトの衰退からの復興も非常に考えされられるテーマだった。

誠実であることの重要性、実業の重要性を、ゴールドマン・サックスと名のつく本が語っている点に、励まされる1冊でした。

可夢偉が、右京に!

可夢偉が、右京に!

F1好き、といってもミーハー感は否めないが、たまらない一冊。思い返せば初めて見たレースが、鈴木亜久里の3位入賞。当時は小学生だったが、セナ・プロストがスタート直後の1コーナーでクラッシュしたり、日本人が活躍する姿は印象的だった。その後はしばらく見ていたんだが、セナの事故死と共に、疎遠に。ただ、佐藤琢磨がF1に来たことから再び見始める。今は可夢偉を見ているだけでF1を見ているわけではないかもしれないが楽しい。

この本は何よりマニアック。書店で平積みされていたので気づいて購入したものの、第1章のオーバーテイクは良いとして、第2章でタイヤの使い方を延々と語っている。レースを見ているとよく聞く言葉だったけれども、初めて、どういうことか分かった。深すぎる。マニアック。

右京のインタビュー形式という点も、良かったんでしょう。

グランツーリスモを通じて車の知識はかなり身についたとの自負があったけれども、やはり浅いですね。とともに、普段は語られることの無い、ナンバー程度の文字数では語れない、深い話があり、F1というスポーツの奥の深さを教えてくれる一冊。

面白かった。

PS:そういえば、中学生のころに、F1裏話なる文庫本を読んだ事を思い出した。その本は多数のドライバーの独特の習慣や、エピソードを書いていたけど、やっぱりひとりに深く斬り込むと印象に残る。その文庫本のエピソードは今となっては、ひとつも覚えていないし(苦笑

PS2:出版社が、東邦出版という会社で、マニアックなスポーツ本も多数出している会社だからこその一冊なのだなと改めて実感。今後、この会社の名前を覚えておこう。。。

虐殺器官

虐殺器官 (ハヤカワSFシリーズ・Jコレクション)

ここのところ久しく小説なんて読んでないんですが、たまたま同時期にtwitter複数のフォロワーが取り上げていて気になり購入。

いずれも、エジプトやリビアの政情不安と照らし合わせての賞賛のコメント。

本屋で文庫を探していて気がついたんだけれども、そもそもSF系の文庫購入は人生初。今まで読んだのもミステリーや馳星周ばっかりだったので、慣れないジャンル。

という事もあったせいか、話の展開・スピード感や描写という点では正直物足りなさを覚えた。そりゃ、今まで読んでた本って、本屋のベストセラーになってたような小説ばかりなんで、大衆向けに作られてるし比較するのも違う気がする。戦闘場面や心理描写での引き込まれるような・・・なんというか臨場感はもうひとつ。

ただ、その不足感も飛ばしてくれるのは、何より驚いたのは、その未来の描写に対する現実感。今まで読んだ大衆的?なミステリーは良くも悪くもワイドショーの延長であったり、当時の時代・事件をテーマにした小説があったので、取材をすれば作れるかもという気がしていたが、下手な映画以上の未来感。これ凄い。人間の移動は全て国が抑えてるとか・・・etc。

エンディングも黒さよりは納得感を残してもらえたので良かったです。アメリカ人が主人公というのもハマった感はあります。あと、初めてカフカは実在する作家という事も知ったし、他にも哲学的な話やら文学的な話やら、wikipedeiaを見ながら雑学を増やさせてもらいました。

惜しむらくは筆者の他界。(合掌

prezi

きっかけは、@nahiのtwitterより。

これからJJUG Night Seminarでしゃべります。スライド:http://bit.ly/JJUGJRuby2011 / 利用サンプル:http://bit.ly/JJUGJRubySamples#jjug#jjugNight

もともと参加したいセミナーだったけど、有休だからと言い訳をして不参加。資料が見られるということで覗いてみると、見たことが無いページ。slideshareでも無いし、どうやってもるんだろうと思ったら、、、

でもびっくりした。たまげた。感動した。

プレゼンテーションそのものに対する考え方を変えさせてくれるようなぐらい、びっくり。

まだ日本のインターネットメディアでは紹介記事が内容だけれども、検索結果の上位を見ると2009年頃よりブログでの紹介が広がってきている。先日やった社内のBIG-IP勉強会で使えなかったのが残念。次回、好き勝手できるプレゼンがあったら使ってみよう。

印刷もPDF化することで対応可能なようだし、社内で使う分には大丈夫でしょう。