SSブログ

電子版『Java SE 8 実践プログラミング』 [Java SE 8 実践プログラミング]

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

  • 作者: Cay S. Horstmann
  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: 単行本(ソフトカバー)
↑紙の本へのリンクです

紙の本からしばらく経過しましたが、電子版が準備されています。今日時点では、まだ、Kindle版の準備はできていないようですが、現在、Google Playでは購入できます。

http://book.impress.co.jp/books/1114101010

Kindle版も含めて、順次、準備される予定です。

11年4ヶ月振りの徳島(2) [その他]

2日目(3月19日)

2日目もあいにくの雨でしたが、徳島県立博物館に行きました。博物館といっても、徳島県立近代美術館も含まれています。展示の最終日だった「国立公文書館展」を見て、他の常設展示を見て回りました。

P1040893.JPG
徳島県立博物館

昼食を併設のレストランで食べた後、徳島県には3店舗しかないスターバックスに行って休憩しようということで、沖浜店に行きました。ここの沖浜店は、昔住んでいたマンションの近くです。

スターバックス.jpg
スターバックス徳島沖浜店

徳島のデザインのスターバックスカードはないのかなと思いましたが、ありませんでした。1時間ほどゆっくりしてから、アスティとくしまへ行ってみたのですが、ここは様変わりしていました。18年前に徳島に住み始めた頃は、観光客が立ち寄る場所で、週末には少人数ですが阿波踊りが行われていました。今は、ほとんど観光客は来ない場所となっています。

この後、昔はなかった阿波おどり会館に行き、阿波踊りを見て、お土産を買った、ホテルへ戻りました。

3日目(3月20日)

3日目は天気もよく、昔はなかったゆめタウン徳島へ行って見ることにしました。

P1040914.JPG
ゆめタウン徳島

徳島市内には、このような大きなショッピングセンターはないので、週末は多くの人がこちらを訪れているのではないかと思います。ここでもスターバックスへも行きました。

11004609_959371267415484_7032960414358466685_o.jpg
ゆめタウン徳島店

スターバックスは、どの店に行ってもだいたいテーブルや椅子などが同じで統一されているのですが、ここの店舗はちょっと違って独自のものになっていました。

昼食を食べた後、次にバルトの庭に行ってみました。映画「バルトの楽園」の撮影の後のロケの設備がしばらく公開されていたのですが、すべて取り壊すのではなく、一部を移設したのがバルトの庭です。


バルトの庭.jpg
「バルトの庭」入り口

平日ということもあり、最初は私達夫婦二人でしたが、途中でもう一組が来られて4人だけで、無料のガイドさんの説明を聞いて回りました。この後には、ドイツ館に立ち寄りました。

ドイツ館.jpg
ドイツ館と道の駅
昔は、手前の「道の駅」はありませんでした。11年前にドイツ館へ行った時に、駐車場に車を止めてトランクから荷物を取りだそうとしたら、1台の車が近づいてきて運転席から「柴田さん」と声をかけられたました。平日で駐車場はガラガラだったのですが、声をかけてきた人は、当時、海老名(神奈川県)の同じ職場で一緒に仕事をしている人でした。まさか、徳島で会うとは思ってもいませんでした。今回は、そのような出会いはありませんでした。

ドイツ館やバルトの庭へ、これから初めて行かれる人は、「ベートーヴェン 歓喜の歌 交響曲第九番」が日本で最初に合唱された「板東俘虜収容所」のことを事前に知るために、映画「バルトの楽園」を見てから行かれるとよいかと思います。

バルトの楽園 [DVD]

バルトの楽園 [DVD]

  • 出版社/メーカー: 東映
  • メディア: DVD

この後、ホテルに戻りました。18時前に「とくぎんトモニプラザ」へ行き、18時から「第7回とくしまOSS勉強会」で2時間近く話をしました。今回は、「ソフトウェアエンジニアの心得」を1時間で話したので、かなり省略したものとなってしまいました。また、その後、Java SE 8の話を30分だけして、Q&Aを行いました。参加者は、20数名でした。

講演の後、懇親会ということで、9名の方が参加されて、遅くまで色々と話をしてホテルに戻ったのは11時30分を過ぎていたと思います。

4日目

4日目は、少し曇っていましたが、眉山に登りました。

P1040934.JPG
眉山からの徳島市街地の眺め

眉山に登った後、レンタカーを返すまで時間もあり、昼食をどこかで食べようということで、「木の花」という店に行きました。

木の花.jpg
木の花

この店は、昔住んでいた頃にはなかったのですが、住んでいたマンションから徒歩数分のところにありました。昼食後、空港へ戻って、レンタカーを返却し、3時30分の便で羽田へ戻りました。

11年4ヶ月振りの徳島(1) [その他]

1日目(3月18日)

最後に行ったのは2003年11月下旬でしたので、11年4ヶ月振りに徳島に行きました。羽田空港から徳島空港へJALで行きました。徳島空港に到着して、手荷物が出てくるのを待っている時から、全く見覚えのない建物のような印象を持っていました。しかし、多少作りを変えたのだろうと思った程度でした。しかし、手荷物を受け取って、1Fのロビーへ出てみると、全く記憶にない建物でした。各社レンタカーのブースがあり、昔はなかったと記憶しています。

日産レンタカーのブースに行って名前を告げると、係の人が空港ビル前の駐車場に連れていってくれて、そこに止めてあった車に取り込み、日産レンタカーのオフィスへ移動しました。たしか、昔は自分で歩いていった記憶があったのですが、空港前ビル前の駐車場から少し遠い所にオフィスがありました。その途中で、徳島空港は新しくなりましたと聞かされて、てっきり同じ場所に建て替えたのかと思っていました。

P1040963.JPG
徳島阿波おどり空港

P1040965.JPG
正面玄関横

しかし、レンタカーのナビに宿泊先のホテルの電話番号を入れて地図を出して出発したのですが、なぜか、滑走路の横を数キロ走っていて、しばらくすると、昔の記憶にある徳島空港の場所に出ました。完全に別の場所に新たな徳島空港が建設されていたのです。空港の名前も「徳島阿波おどり空港」となっています。旧徳島空港ビルは、運転免許センターになっていました。

「第7回とくしまOSS勉強会」の会場の近くの徳島県庁の隣の徳島グランヴィリオホテルに宿泊しました。私が徳島に住んでいた頃は、徳島プリンスホテルだったホテルです。ホテルの部屋からは次のような風景が望めました。

P1040903-PANO.jpg
ホテルの部屋からの眺め

私が住んでいた頃は、徳島ビールだった建物は、ザ・パシフィック・ハーバーとなっていますし、写真の右端には、今は病院ですが、昔はSATYがありました。私が住んでいた頃には、ジャスコも近くにありました。

ホテルにチェックインした後、夕食は、昔よく行った「トマト&オニオン」に行って、17年ぶりに食べました。お店の外見と雰囲気は、17年前と変わっていませんでした。食後に、すぐそばにある以前住んでいたマンションへ寄ってみたのですが、マンションの前はキョーエイ沖浜店というスーパーになっていました。

P1040943.JPG
17年前に住んでいたマンション

17年前には近くにスーパーが無かったので、徳島文理大学近くのキョーエイまで買い物に行っていました。今の沖浜店は、11年前は電気店でした。以前住んでいた徳島市山城西は住みやすい場所に変わっていました。

コメント(0) 

書籍『The Go Programming Language』 [golang]

The Go Programming Language (Addison-Wesley Professional Computing Series)

The Go Programming Language (Addison-Wesley Professional Computing Series)

  • 作者: Brian W. Kernighan
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2015/08/27
  • メディア: ペーパーバック

発売は、8月末の予定ですが、予約できるようになっています。今のところ、次のような目次となっているようです。
Table of Contents
Preface 1. Tutorial
2. Program Structure
3. Basic Data Types
4. Composite Types
5. Functions
6. Methods
7. Interfaces
8. Concurrency
9. Packages and the `go` tool
10. Testing
11 Reflection
12. Low-level Programming
A. Reference Material
まさか、Brian W. Kernighanが執筆しているというのは、ちょっと驚きです(実際には、Alan Donovanとの共著です)。

コメント(0) 

プログラミング言語の経験(5) [プログラマー現役続行]

1991年の頃から自宅ではMacintoshを使用していたのですが、1996年の夏にWindows PCを購入したこともあり、好奇心からJavaの学習を始めました。

3年近くC++でプログラミングしていたので、ある意味、書き方が異なる程度ではあったのですが、「インタフェース」だけは当初理解できませんでした。C++には、言語仕様として「インタフェース」は存在せず、Javaにはinterface予約語で宣言するインタフェースが存在します。インタフェースを理解するのには、一ヶ月以上を要したと思います。しかし、本当の意味で理解するようになったのは、かなり後です。

ある意味、3年間のC++でのプログラミング経験は、「Programming in a language」に過ぎなかったのです。つまり、C++が提供する設計道具を使用して設計しているにしか過ぎませんでした。C言語で手続き型プログラミングをするけど、オブジェクト指向プログラミングをしないと同じです。

仕事ではなく、趣味でJavaを学び始めたのですが、Javaを通して私の設計道具に「インタフェース」が増えたことになります。Javaからは色々な影響を私自身は受けましたが、「インタフェース」という道具は強力でした。あまりにも、強力だったので、2000年から再びC++を用いた開発に関わるようになった時に、「インタフェース」の概念をC++での開発に積極的に取り込むことにしました。つまり、「Programming into a language」を行った訳です。自分が行いたい設計を与えられた言語でどのように表現すれば良いかということです。言い換えれば、C言語でオブジェクト指向プログラミングするのと同じです。

1996年の夏から学習を始めたJavaですが、仕事で私自身がソフトウェアをJava言語で書いたのは、2005年の頃に3ヶ月ぐらいしかありません。Javaでのプログラミングは、その多くが、趣味で開発していたMessagingToolです。1980年代からXerox社内では使用されたいた、いわゆるチャットツールのJava版です。

MessagingToolの書き直しを通してJavaを使い続けていました。
  • 最初のバージョンでは、Javaの言語仕様にネストしたクラスやインタフェースがない頃で、AWTを使用して書きました。
  • Java 1.1が登場して、ネストしたクラスやインタフェースが導入されたので、イベント処理のコードを書き直しています。
  • AWTに代わるSwingが登場したので、大幅に書き直して、AWTとSwingの両方をサポートするようにしました。
  • Java SE 5.0のリリースでは、ジェネリックスを用いた書き直し
  • Java SE 8のリリースでは、ラムダ式を用いた書き直し
  • 並行して様々な機能を追加していきました。ファイル転送機能、会議室機能、それにおまけの付箋紙機能とか。
他にJavaで書いているのは、私のホームページです。ホームページのソースコードはJavaで書かれており、GWT(Google Web Toolkit)を用いてJavaScriptへコンパイルされています。

仕事でJavaを使用して実際にコードを書くことはあまりないのですが、2000年から再びC++を使用した開発に戻ってからは、2009年まではC++でコードを書いていました。しかし、Javaを通して学んだ設計方法をかなり適用していました。

コメント(0) 

プログラミング言語の経験(4) [プログラマー現役続行]

私自身のMesa言語による開発は、1991年5月にXerox PARCへ転勤して新たなプロジェクトへ従事することにより終わりました。その後のPARCでの2年間は、再びC言語でソフトウェア開発を行っていました。

1993年5月に4年半の米国駐在を終えて日本に帰国した時は、33歳でした。日本に帰国してからは、後にFuji Xerox DocuStation IM200として商品化された製品の開発に従事しました。IM200は、従来のデジタル複合機としてのコピー/Fax機能に加えて、ペーパーユーザーインタフェースによる新たなサービスを搭載した製品でした。


Fuji Xerox DocuStation IM200

当時の富士ゼロックスは、ワークステーション事業から撤退し始めており、ワークテーション開発に従事していた30代前半のエンジニアが集められて、IM200の開発を始めました。この製品は、従来のデジタル複合機のソフトウェアを流用することなく、集められたメンバーですべてを新規にC++言語で開発しました。そして、OSとしてSolaris 2.3を採用していました。

C++言語は、1993年に日本に帰国してから本格的に学び始めました。大学からも含めれば15年間もすでにプログラミングをしていたのですが、オブジェクト指向言語は初めてでした。従って、オブジェクト指向とは何かというところからの学習でした。オブジェクト指向が何となく分かったような分かっていないような状態で最初に直面した問題は、C++言語での実装の隠蔽でした。

その頃は、C言語での開発でも実装を隠蔽する抽象データ型を意識して開発していました。そのため、たとえprivateのフィールドであっても、クラスにフィールドを追加すると、そのクラスを使用しているクライアントのコードをすべてリコンパイルする必要があるのは困るという問題に直面しました。それで、何とかそのようなリコンパイルを回避するようなC++言語の使用方法はないかと考えて、ある方法を思い付きました。そして、その方法ですべてのコードを書くというプロジェクト方針にしました(詳しくは、「API設計の基礎」を参照してください)。

開発メンバーのほとんどが30代前半だったためなのか分かりませんが、かなり楽観的なチームの雰囲気で、発生する問題は全部解決していけば何とかなるという雰囲気でした。(それに加えて、飲み会もかなり頻繁に行ってました。週に2、3回とか・・・)

ある程度開発が進んで大きな問題になったのは、2週に1回のリリース用ビルドが必ず失敗するということです。当時は、継続的インテグレーションという考えはない時代でしたので、全員のソースコードを集めて、2週に1回ビルドして、コンパイルできない状況が繰り返されていました。さすがに何とかしないといけないということで、夜間に自動ビルドをすることにしました。当初は、毎晩、ビルド失敗の連続でしたが、数週間したら安定してビルドできる状態になりました。

さらに開発が進んで、次に大きな問題になったのは、「メモリーリーク」でした。メモリーリークだけでなく、メモリー破壊も含めて何らかの手を打たないと製品としては安定しないことははっきりしていました。それで、C++言語の標準のnew演算子とdelete演算子を全く別の実装に置き換えることで解決を図りました。マルチスレッドプログラミングをしていたので、スレッド単位でのメモリーリークを検出できるようにし、ある程度のメモリー破壊もdelete演算子の呼び出し時に検出するようにしました。

ペーパーユーザーインタフェースではなく、別のサービスも同時に子会社で開発されており、それが1995年末に自治体窓口証明発行システムとしてFuji Xerox DocuStation AS200が発売になり、翌年にはペーパーユーザーインタフェースを搭載したIM200が発売されました。
※ リコー内でも知らない人が多いのですが、このAS200は、後にリコーへOEMされて「イマジオ 市町村窓口証明システムSG2000シリーズ」として発売されています。


Fuji Xerox DocuStation AS200

私にとっての初めてのC++言語による開発でしたが、振り返ってみるとできていないことも多数ありました。
  • 自動テストを書くこと
  • 継続的インテグレーション
  • 防御的プログラミング
  • 「インタフェース」を用いた設計
この頃は、Java言語は登場していなかったので「インタフェース」という設計概念をC++言語へ持ち込むことはできていません。また、防御的プログラミングという言葉も知りませんでした。

1996年8月末に36歳で退職するまでの3年間は、C++言語で(マルチスレッド)プログラミングしていたことになります。

コメント(0) 

プログラミング言語の経験(3) [プログラマー現役続行]

入社してから開発に従事していたFuji Xerox 6060 Workstationの後継機開発は、1988年に中止となり、1988年夏頃からMesa言語の学習を始めました。それまでのプログラミング経験とは異なり、以下の点が大きく異なっていました。
  • インタフェース(API)とその実装の明確な分離
  • マルチスレッドプログラミングのサポート
  • 例外のサポート
Mesa言語を使用した開発経験については、こちらに書いていますので、今回は省略します。

プログラミング言語の経験(2) [プログラマー現役続行]

1984年4月に就職して、7月初旬までの塚原研修所での泊まり込み集合研修を終えて、海老名事業所での勤務が始まりました。新たなワークステーション(Fuji Xerox 6060 Workstation)を開発するプロジェクトに配属されて、UnixおよびC言語を学び始めました。


Fuji Xerox 6060 Workstation

UnixおよびC言語は、大学時代はほとんど触ったことがなかったのですが、どうやって学んだのかはあまり覚えていません。ただ、「Unix Magazine」が創刊されると、それから米国に赴任する1988年11月頃までは購読して読んでいました。

米国に赴任するまでは、C言語で開発していたのですが、当時は、コードレビューの習慣もないし、自動でテストを行うテストコードを整備するという時代でもありませんでした。

ワークステーションのソフトウェアを開発しながら、開発用ツールとして、私自身はネットワーク系のツールも開発していました。それらは、主にXNS(Xerox Network Systems)プロトコルに基づくもので、XNSのサーバを利用するツール群でした。当時のゼロックスグループ内には、Mesa言語で書かれたツールは多数存在したのですが、私が属していたプロジェクトは、一からワークステーションを開発しているため、ツールも自作する必要がありました。ファイルサーバ、プリントサーバ、メールサーバを利用できるようにするツールや、Ethernet上のパケットを収集するなどのツールを開発していました。

製品のソフトウェアと異なり、これらの開発用ツールは、私の趣味で作っていました。つまり、業務の一環として開発するように指示された訳ではなく、自分が欲しいツールを勝手に業務時間中に作っていました。もちろん、作成したツールは、プロジェクト内で共有していました。

製品ソフトウェアではないので、新たな機能を追加するごとに、頻繁に書き直していました。書き直しの多くは、既存のコードのままでは、新たな機能を追加するのが困難場合に行いました。そのため、設計を変更してから、機能を追加することが多かったです。

しかし、当時はまだC言語による抽象データ型の実装は全く知らないし行っていませんでしたので、結構、ひどいコードを書いていたと思います。ただ、書き直しの過程で、色々なことを試していました。たとえば、ネットワークプログラミングをしている部分で、コネクションが切れた時の処理としてsetjmp/longjmpを使用してコードをすっきりさせるとかしていました。

テストコードが無かったので、厳密には「リファクタリング」にはなりませんが、頻繁に書き直してはデバッグすることを繰り返していました。商品のソフトウェアでは、テストコードがなければ書き直しを経験することはほとんど皆無です。しかし、自分で作成したツールであれば何度も書き直しができるので、そのような経験をするためのツールを持っていたことは、当時としては非常に重要だったと思います。

(関連記事「Breakable Toys」)

第3回Java研修OB・OG懇親会を開催します [プログラミング言語Java教育]

2013年、2014年と開催してきましたJava研修OB・OG懇親会を今年も開催します。

【開催日】 
  4月18日(土)
【時間】
  第1部 15:30〜17:20 技術セッション (みなとみらい)
  第2部 18:00〜20:00 懇親会(横浜中華街)
【参加対象者】
  Java研修の修了生

参加を希望される修了生は、私宛にメールで問い合わせください。折り返し、登録サイトの情報を送ります。すでに登録サイトの情報を私からのメールで受け取っている人は、そのサイトで参加登録をお願いします。