SSブログ

ソフトウェアエンジニアとしての転機(6) [ソフトウェアエンジニアとして転機]

Fuji Xerox DocuStation IM200

Xerox PARCでのPageMillプロジェクトの成果を商品化するために、1993年5月に日本に帰国しました。34歳でした。商品化したFuji Xerox DocuStation IM 200については、富士ゼロックスの「商品・サービスの歩み」の1996年に写真とともに簡単に説明されています(古いアーカイブはこちらです)。

製品を開発するための開発室が富士ゼロックス内に作られて、製品計画、ハードウェアエンジニア、ソフトウェアエンジニアがその開発室に集められました。ワークステーション事業からの撤退が決まっていたので、私を含めて集められたすべてのソフトウェアエンジニアが、ワークステーション関連の開発からデジタル複合機に開発に従事することになります。ワークステーションから組み込みシステムと180度転換したように思えますが、実はそうではありませんでした。

IM200の開発では、デジタル複合機としてコピー/Faxを基本機能として実装するのですが、それに加えてPARCでの成果としてのペーパーユーザーインタフェースを実装しなければなりませんでした。開発が始まったのが1993年ですが、使われた主な技術は以下の通りです。
  • CPU:SPARC
  • OS:Solaris 2.3
  • 開発プログラミング言語:C言語(デバイスドライバー)、C++言語(コントローラソフトウェア)、PostScript(ペーパーユーザーインタフェース処理エンジン)
  • 全体デザイン:レイヤ構成で、複数のプロセスから構成され、各プロセス内ではマルチスレッドプログラミング

二つの大きな課題

外見はデジタル複合機ですが、内部は普通のワークステーションと同じでした。このプロジェクトでは技術的に問題が多かったのですが、今から考えると無謀とも思える課題がありました。
  • 私も含めてすべてのソフトウェアエンジニアが、C++での開発経験がなく、ましてやC++でのマルチスレッドプログラミングは初めて。
  • 私を含めてすべてのソフトウェアエンジニアが、ハードウェアデバイスを制御するコピーやFAXの設計・実装の経験がないし、ドメイン知識も持っていない。
C++が初めてということに関しては、「各人勉強してください。当然、勉強しますよね。」という感じでした。マルチスレッドプログラミングに関しても、「Mesa言語での経験はありますよね。だから問題ないですよね。」と。実際、外部の教育を受けることなく、独学で各人が学ぶという状況でした。

C++を学び始めて、全員で開発を始める前に解決する必要があると痛切に感じた課題は、「API設計の基礎」に書いた「実装の隠蔽」です。それは、「1.5 C++言語による実装の隠蔽」に書いていますので興味がある人はそちらを参照してください。

「ドメイン知識なしのコピー/Faxの開発」は、プロジェクトの後半で大きな手戻りを発生させました。完成が近づいたと思ったころに、従来のデジタル複合機を開発していたエンジニア達が完成度の確認をするためにテストを始めてくれたのですが、(ドメイン知識がないまま開発したことによる)さまざまな問題点を指摘されました。その問題の修正のために余分な開発期間を必要としました。

学んだこと

このIM200のプロジェクトでは多くのことを試行錯誤しながら、さまざなことを実践していきました。学んだことや実践したことをまとめる次の通りです。
  • (当時の)C++でのプログラミング
  • メモリーリークやメモリー破壊の問題を解決するために独自のメモリ管理ライブラリを実装(「clibと呼ばれるライブラリー開発の思い出」
  • マルチスレッドプログラミングによるデッドロックのデバッグの経験
  • 夜間ビルドの導入
  • QAからの障害報告への対応をエンジニアが日替わりで担当する「Debugger of the Day」の導入
  • mmapによるファイルへのアクセス技法
  • さまざまなサービスを.soファイルに分割作成して、起動時に動的ローディング
  • コピー/Faxに関するドメン知識の獲得
IM200の開発を通して得た経験・知識は、その後従事した3回のデジタル複合機のコントローラ開発でのベースとなりました。

1996年にFuji Xerox DocuStation IM200は商品化されてリリースされ、あらたなビジネスモデル(ペーパーユーザーインタフェースのサービスを使うごとに課金)を模索したのですが、残念ながら売れませんでした。後継機の開発もなく、1996年8月に私は富士ゼロックスを退職しました。

追記

IM 200開発では、朝7時過ぎに出社して、夕方まで働いて、それから飲み会という日が週に3日はありました。当時は、富士ゼロックスでは福利厚生の補助で安く飲み会ができました。
コメント(0) 

在宅勤務 [プログラマー現役続行]

2月18日(火)から在宅勤務を始めたので、2か月が過ぎました。新型コロナウィルスのために会社として在宅勤務が始まったのが2月19日(水)だったのですが、通勤時間が長いということで、マネージャの許可をもらって在宅勤務を始めた翌日に会社として正式な在宅勤務となりました。

仕事は、マイクロサービスのソフトウェア開発のため、会社でも自宅でもソフトウェア開発はもともとできました。ただ、原則出社でしたので、往復4時間弱をかけて通勤していたわけです。2か月間、在宅勤務をしたことになるのですが、出社する場合との違いを簡単にまとめてみます。

通勤時間からの解放

往復4時間弱の通勤でしたので、朝は5時54分の始発(初電)電車に乗車して、7時30分に六本木ヒルズのオフィスに到着していました。16時には退社して、帰宅するのは18時前という生活を送っていました。そのため、会社にいるのは実質的に7時30分でした。

在宅勤務を始めてからは色々と試行錯誤したのですが、現在は8時から仕事を始めて、17時過ぎには終えるようにしていますが、18時過ぎることもあります。

通勤時間がないため、起床時間や就寝時間がゆるくなりました。7時間の睡眠時間を確保して、往復4時間弱の通勤のために、起床時間も早かったですし、就寝時間も早かったです。在宅だと、起床時間は以前よりも確実に2時間遅くなっています。その部分、就寝時間も遅くなっています。

自宅でのソフトウェア開発

在宅でのソフトウェア開発となると、オフィスの環境と異なり、机、椅子、ディスプレイなどが異なって、快適に開発に専念できない人も多いようです。会社としては、在宅の環境を整えるための在宅勤務手当や、ディスプレイの購入補助制度を用意してくれています。

私の場合は、書斎として使っている部屋があり、机、椅子、ディスプレイ(27インチと21インチ)は整っているので、オフィスよりも環境は整っています。そのため、在宅でのソフトウェア開発には何の支障もありませんでした。

オフィスでのソフトウェア開発と大きく違うのは、夕方になって焦る必要がないことです。オフィスでは、16時に退社するために、夕方になるとPRのレビュー依頼を出す前の見直しを省略しがちになっていました。自宅だと時間があるので見直せます。

ミーティングはGoogle Hangoutで行います。ミーティングが続いているときに、オフィスだと会議室を移動しなければなりませんが、在宅だと移動がないので楽です。ただ、自分の作業に集中しているとミーティングに参加するのを忘れることがあるので、10分前にカレンダーで通知があったときに、早めにGoogle Hangoutに参加した状態にして作業しています。

運動不足

在宅勤務での問題点は、通勤が無くなったために、運動不足になることです。通勤はそれなりに歩いたり、階段の上り下りで運動になります。また、脊柱管狭窄症がよくなって、昨年の5月からは、毎朝、大江戸線の六本木駅の一番深いホームから階段を歩いて登っていました。

現在は、脊柱管狭窄症で歩行が困難になった頃に購入したエアロバイクを毎朝30分行うだけです。夕方仕事を終えて、天気がよい日は、散歩に出かけることもあります。

技術研修

金曜日に複業として行っている企業向けの技術研修(JavaとGo)は、3月はすべて中止しました。しかし、対面での研修はしばらく無理そうなので、4月からはオンラインで研修を再開しています。ただ、オンライン研修は初めてなので試行錯誤の段階です。

まとめ

いつ頃出社可能になるのか見通しが不明ですが、在宅勤務を2か月行ってみて、仮に出社可能になっても、出社する必要はないのではないかと思い始めています。私の場合、出社するよりも、在宅の方が多くの時間をソフトウェア開発に費やせます。

でも、旅行したり、スターバックスで翻訳作業したり、外食したり、映画館で映画を見たり、対面で研修したり、外で飲み会したりという日常が早く戻ってきて欲しいと思います。
コメント(0) 

最近購入した防災用品 [防災用品]

最近、災害時用の商品をいくつか購入しましたので、簡単に紹介します。

パナソニック コンパクトソーラーライト BG-BL01G-W

パナソニック コンパクトソーラーライト BG-BL01G-W

  • 出版社/メーカー: パナソニック(Panasonic)
  • 発売日: 2011/08/26
  • メディア: ホーム&キッチン

これは、充電用の単3電池2本を太陽光で充電するものです。いざとなったときに、どれほど役立つが不明ですが、日の当たる窓とカーテンの間に常に置いておくと充電されています。太陽光パネルの反対側はLEDライトになっています。現在は生産・販売が行われていない商品です。

パナソニック 単3形・単4形 USB入出力急速充電器セット 単3形エネループ×4本付き K-KJ87MCC40L

パナソニック 単3形・単4形 USB入出力急速充電器セット 単3形エネループ×4本付き K-KJ87MCC40L

  • 出版社/メーカー: パナソニック(Panasonic)
  • 発売日: 2019/07/26
  • メディア: エレクトロニクス

充電用電池の充電器としても使えますが、電池を入れていればスマートフォンに充電するバッテリーとしても使えます。LEDライトも付属しているので、強い明かりではないですが、ライトとしても使えます。

パナソニック LEDランタン 乾電池エボルタNEO付き ホワイト BF-AL02K-W

パナソニック LEDランタン 乾電池エボルタNEO付き ホワイト BF-AL02K-W

  • 出版社/メーカー: パナソニック
  • 発売日: 2019/06/28
  • メディア: ホーム&キッチン

小さなランタンです。明かりは強くはないですが、いざとなったときは役立つかと思います。

ここまでは、あれば多少は役立つかなというものですが、長時間は使えないので、以下のポータブル電源も購入しました。容量が大きいものもあるのですが、その分、重くなるのでこちらにしました。


これも停電が長引くと充電できなくて、最後は電池切れになりますから、このポータブル電源を充電するのに使える同じメーカーのソーラーパネルも購入しました。


ポータブル電源を充電するのに使えるだけでなく、このソーラーパネルから直接スマートフォンの充電もできます。また、折りたたみ式なので、収納に困ることはありません。
コメント(0) 

書籍『UNIX: A History and a Memoir』 [本]

UNIX: A History and a Memoir

UNIX: A History and a Memoir

  • 作者: Kernighan, Brian W
  • 出版社/メーカー: Independently published
  • 発売日: 2019/10/18
  • メディア: ペーパーバック

Unixと言うものがあるらしいと聞いたのは大学院の修士課程を終える頃で、東芝のUnixマシンをどこかの研究室が購入したのがきっかけでした。しかし、直接触ることはほとんどなくありませんでした。就職してから、塚原研修所(富士ゼロックス)での新人研修で同じ東芝のUnixマシンを少し触った程度でした。

Unixを本格的に使うようになったのは、新人研修を終えて配属されてからです。確か、DECのVAX上でUnix(4.2BSDだったかな?)を使っていました。独自のワークステーション(後に発売されたFuji Xerox 6060 Workstation)を開発するプロジェクトで、OS以外はほぼすべてを開発しました。ワークテーション用のOSはAT&TのUnixではなく、Idrisと呼ばれるUnixクローンでした。

それ以来、Linuxも含めて、4.3BSD、System V、SunOS 4.x、Solaris 2.3、Linux,macOSとさまざまなUnixを使ってきたのですが、初期のUnix開発についてはあまり読んだことがなく、あえて言えば1989年に読んだ「Life with Unix」ぐらいでした。

Life With Unix: A Guide for Everyone

Life With Unix: A Guide for Everyone

  • 出版社/メーカー: Pearson P T R
  • 発売日: 1989/04/01
  • メディア: ペーパーバック

『UNIX: A History and a Memoir』では、著者であるBrian Kernighan自身の長年のAT&ATベル研究所での活動も含めて、一緒に働いた人達(著名人の集団という感じです)とUnixの歴史が書かれています。また、今日でも使われているUnixの様々なコマンドがどのように誕生したのかも説明があったりして、楽しく読める内容となっています。

目次は次の通りです。
Chapter 1: Bell Labs
Chapter 2: Proto-Unix (1969)
Chapter 3: First Edition (1971)
Chapter 4: Sixth Edition (1975)
Chapter 5: Seventh Edition (1976 - 1979)
Chapter 6: Beyond Research
Chapter 7: Commercialization
Chapter 8: Descendats
Chapter 9: Legacy

Unixの歴史以外に面白いと思ったのは、Brian Kernighanの書籍は、共著も含めてすべてtroffをベースとしたソフトウェアで組版されているということです。
One of the main motivations that Bill and I had for doing our own typesetting was to avoid the errors that the conventional publishing process frequently introduced into printed computer programs. Because we had total control over our content, from input to final pages ready to be printed, we could test the programs directly from the text, which would never be touched by copy-editor or compositor hands. The result was an essentially error-free programming book, which was most unusual at the time. I’ve used that same process ever since; the books listed at the front of this one have all been produced with Troff or its modern incarnation, Groff. Fortunately, one no longer needs typesetters and their expensive and unpleasant media. Today it’s sufficient to get everything right in a PDF file and send that to a publisher or printer.

Kernighan, Brian. UNIX: A History and a Memoir (p.116). Kindle 版.

この本は紙の本とKindle版があり、紙の本は日本で印刷(プリント・オン・デマンド)されるのですが、写真の画質が良くないので、その点ではKindle版がお勧めです。
コメント(0) 

訳者まえがき『新世代Javaプログラミングガイド』 [訳者まえがき・あとがき]


プログラミング言語Javaが1995年に登場してから、25年近くの年月が経過しました。私自身がJDK 1.02で初めてJavaに触れたのが1996年夏であり、それ以来、Javaは大きく発展を遂げてきました。私自身が経験した言語仕様の大きな変更は以下の通りです。
  • Java 1.1でのネストしたクラスとインタフェース
  • Java 5でのジェネリックス、enum、アノテーション、拡張for文、可変長パラメータ
  • Java 8でのラムダ式、インタフェースでのdefaultのメソッドとstaticのメソッド
Java 9以降は、大きな言語仕様の変更はありませんが、細かな変更が行われています。この本は、Java 10から13までの変更、およびAmberプロジェクトで行われている言語仕様の変更を説明しています。この本で解説されている言語仕様の変更は、以下の通りです。
  • var(第1章「ローカル変数での型推論」と第5章「ラムダパラメータのローカル変数の構文」)
  • switch式(プレビュー言語機能)(第11章「switch式」)
  • テキストブロック(プレビュー言語機能)(第15章「テキストブロック」)
  • record(Amberプロジェクト)(第14章「データクラスとその利用方法」)
  • enumの拡張(Amberプロジェクト)(第13章「Amberプロジェクトの拡張enum型」)
  • パターンマッチング(Amberプロジェクト)(第17章「パターンマッチング」)
switch式はC言語から受け継いできた構文から脱却して、新たな構文を提供します。テキストブロックは、文字列リテラルの新たな書き方を提供します。パターンマッチングは、型検査と型キャストの冗長さを削減する機能です。

switch式とテキストブロック(text block)は、Java 13にはプレビュー言語機能(11.6節)として入っているので、オプションのフラグを指定する必要はありますが試せます。switch式は、Java 14で正式な機能としてリリースされる予定です。

言語仕様の変更以外にも、GCの改善や見落としがちなCDS(Class Data Sharing)をベースとした起動時間の短縮やメモリ量の削減などのさまざまな改善点が解説されており、Java 10以降の変更の概要を学べます。

原著と日本語版の違いについて

言語仕様の変更部分については、この本の原著が執筆された時点と、日本語への翻訳時点では異なっている部分が多数あります。そのため、日本語版では、必要な修正、削除、追加を私 自身の判断で行っています。また、原著はJava 12まででしたが、日本語版では必要に応じてJava 13および14へ言及したり、訳注を付けたりしています。

コメント(0)