2016年を振り返る

今年は「Hard Work」をテーマとして掲げていた。それは概ね達成できたと思う。
そしてその副産物として、色々得ることができた。
また、初めて経験することが多く、これからの人生で過去を振り返る時にもターミングポイントになるだろうものがあった。
そこで、今年の振り返りと題して、それらを少々まとめることにする。(だいたい時系列)

Interconnect

ラスベガスで行われたIBM Interconnectに参加した。初めての海外だったので、それだけでも充分に目新しいことが多かった。しかし、このイベントではそれ以上に得るものが多かった。
国際的なイベントの規模の大きさ!新しい技術!自分の知らない文化!
刺激が多かった。吸収仕切れない。
あの時の興奮は、今でも頭の中に強く残っている。
IBM InterConnect2016に参加してきました - blue9's 外壁


表彰式

これまで表彰式と無縁の人生を送ってきたため、たいそう嬉しいことだった。
ランチに食べた、いいホテルの高いコース料理は、庶民の舌には美味しいのかよく分からなかった。
1日に3件も取材を受けるなんて、一生に一回あるかないか。いい経験になった。
WIREDは好きなメディアなので、取材されたのは嬉しかったな。
千葉裕也 | メインフレームは「世界への扉を開く鍵」その存在を知って、すべてが始まった « INNOVATION INSIGHTS

北陸旅

金沢は素晴らしい。文化が洗礼されていた。
新潟も良かった。
夏に旅に出られなかったため、無理してでも行って良かった。
f:id:blue_9:20161230223150j:plain
f:id:blue_9:20161230223251j:plain

世界大会

日本代表として、2016 IBM Master the Mainframe World Chimpionshipに参加した。
偶然にも大学の授業が休講だったため、2週間ほど誰にも会わず、じっくり取り組んだ。
問題を与えられたら解きたくなる性分だし、分からないことに頭を悩ますのが大好きなので、幸せな2週間だった。
メインフレーム・コンテストで、正しく理解できてなかったなとか振り返る機会にもなったので良かった。
f:id:blue_9:20161230223826p:plain

インターン

K社とF社でインターンをしてきた。
プログラマをしていたけれど、経営者の方々と近いところで仕事をしていたため、そこから影響を強く受けた。
K社社長のNさん、F社PEのSさんと尊敬すべき方に出会えたことは良かった。
インターンの経験は素晴らしく、自分の進路選択に強い影響を与えた。

ミニマリズム

10月から生活にミニマリズムを取り入れた。
前から気になってはいたけれど、本格的に取り入れるに踏み切ったのは、重大な判断をする機会が増えたからである。

試練は年齢と共に高まる
ゲーテ

重大な判断に迫られる中で、一つ一つの小さな判断が邪魔に思えてきた。
人生の分岐点で右に行くか左に行くか判断しなければならない時に、「今日はどの服を着ようか」なんて判断はどうでもいい。
完全に(そもそも完全とは?)ミニマリズムを取り入れられたわけではないので、これからも試行錯誤する必要がある。
現在のところ、良い感じである。

ヘッセ

夏以降、気分が上がらず、会う人会う人に「元気ないですね」と言われ続けた。
気分が上がらなかっただけで、凹んでいたわけではない。ただ、色々考えていたのである。
そんな時、かつて恩師に勧められたヘルマン・ヘッセの「シッダールタ」を読んだ。
ヘッセには昔から興味はあったが、ここまで共感・感服したのは、この本が一番だ。
それから1920年代のヘッセのエッセイ、詩を読み漁った。
彼は素晴らしい思想を持っていた。僕は傾倒してしまった。
しかし、彼は
「どんな本のどんな1ページも、君に智慧は与えることはできない」
と言う。
シッダルタ (岩波文庫)

2017

人間の記憶は当今の出来事、思想を色濃く反映してしまう。
よって、2016年を現在振り返るのと、未来に振り返るのでは、異なった見え方になるのであろう。
本当はここに私情をもっと記しておきたいが、....やめておこう。

12月に同い年のとても面白い奴に出会った。
「新しい知識を得るためにはリスクが必要だよ」
彼は言った。
ハッとさせられた。
これまで、リスクがないように選択し、重大なことから逃げてきたことを。
そして、選択においてリスクを取る必要が迫っていることに気づきながら、無視していたことを。
その場で、来年のテーマは「リスクを犯せ」にしようと決めた。

昨年は「動」、今年は「Hard Work」、来年は「リスクを犯せ」。

来年も面白い一年になるに違いない。

プログラマとデザイナ

親友

親友に美大でデザインを専攻している者がいる。彼とは古くから親しく、この世界で唯一、自分が考えていること全て話せる存在だ。
少し前に彼から興味深いことを言われた。「君は漫画もカードもゲームも好きではないし、全く趣味は合わない。でも、人生に対する考えが好きだから一緒に遊ぶのだと思う。」
全くその通りである。そんなことは僕もずっと思っていた。でも、一つだけ疑問があった。
彼はデザイナであり、僕はプログラマである。彼は絵が上手で、僕は絵が下手だ。彼はクリエィティブだし、僕はクリエィティブではない。
趣味も違うし、よりパーソナルに近い部分でも違う。しかし、彼と馬が合うのなら、何か共通することがあるのではないか。

デザイナ

最近、様々な業種の方々と仕事をすることがあった。初対面の席でお互い、自分の職業と仕事を選んだ理由、仕事で何を得たいのか自己紹介した。
そこで、二人ほどとても興味深いことを話す方がいた。思考手順が面白かったのだ。彼女らはデザイナだった。その時は職業というより、二人の個人としての魅力が興味を誘っているのだと思った。
そういえば、二人はクールな腕時計を身に着けていた。

消費

その後、デザインを学んでいる友人と遊ぶ機会があった。彼とは高校の時からの関係で、卒業後も定期的に会う仲であるが、基本的には話が合わない。
遊んでいる途中、彼が「この時計買った」と左手首に巻いた腕時計を見せてくれた。Paul Smithのロゴが入っていた。聞くところによると、3万5千円ほどらしい。
「でも、他にも欲しい時計があって、イッセイ・ミヤケのやつなんだ。でも、4万以上するんだよね」彼は楽しそうに話していた。そして、他にも欲しい物がたくさんあるらしい。
別にブランドを身に着けるのは悪いとは思っていない。しかし、次から次へと物欲に燃えている彼は消費そのものであった。それを見て、直感的に彼はデザイナではないなと思った。

アート

僕はその仕事でプログラムを書いていた。でも、これまでとは違う。良い設計を考えて、エレガントなコードを書くことは求められていなかったのだ。求められていたことは、ただただ設計書通りに狂いなくコードを書くこと。
そこに創造はいらなかったのだ。それは退屈であったし、ショックであった。しかし、現実の仕事とはそういうものらしい*1。そこで僕は、自分がプログラムを創造することに愉しみを見出していたことに気づいた。
僕にとって、プログラミングは第一級のアートだったのだ。

創造

件の仕事の最後に、まとめのミーティングがあった。そこでもやはり興味深いことを話す方々がいた。彼らはデザイナであった。
退社後、彼らと飲みに行った。その席で「いい時計してるね」と言われた。僕がつけていたのは、スウェーデンのメーカの1万円くらいの腕時計だった。
声をかけてくれた彼女は白と黒のスタイリッシュな素敵な腕時計をしていたので、「それもいいね」と僕は返した。
「でしょ?これ2500円の20%割引で買えたの!」彼女は答えた。隣のデザイナが光沢のある青の文字盤に金色の時刻点がある美しい時計をしていたのも気になっていたので、「それは?」と聞いてみた。
「これはね1200円だったの」彼女は答えた。安価な物であったが、素晴らしいデザインで、彼女らにとてもお似合いだった。そして個性が光っていた。
そこで、自分に似合う腕時計を身に着けることは創造だと気づいた。

共通点

僕は絵を描いたり、何かをデザインしたいと考えたことはない。非クリエィティブな人間だ。だから、デザイナという職業とはかけ離れていると思っていた。
しかし、振り返ってみると、僕がプログラミングにこれほど熱狂できるのは、「どうすれば良い設計になるだろう?どう書けば、もっとエレガントになるのだろう?」と考え続けることができたからであると思う。
そこにhackしがいがあったのだ。創造があったのだ。
これで彼と共通することが分かった。対象は違っていても、お互い何かを創造することを楽しむ心を持っていたのだ。
そして、創造するための思考手順に似たものをお互い感じ取っていたのだ。

いつか彼にこのことを話してみようと思う。きっと、創造に富んだ返答をしてくれるだろう。

*1:もちろん会社によって違う。僕がいたところはウォーターフォールモデルで開発が進められていた。設計書に逆らってはいけないのだ

IBM InterConnect2016に参加してきました

2月21日から24日の間、IBM InterConnect2016に参加してきた。
そのまとめ。

1日目

General Session Day 1: Digital Business Transformation

InterConnect2016最初のSession!
とりあえず、会場が広くて規模の大きさに圧倒された。
ITイベントは初めてだったため、どのように聴けば良いか分からなったが、Appleのトークは印象的だった。
f:id:blue_9:20160228234514j:plain
スライドの見易さ、トークの間の置き方は他とは違った。
IBMのイベントにも関わらず、内容はSwiftのことばかりw。
しかしSwiftを触りたくなったし、自分達のプロダクトを押し通せるのはさすがだなと思った。

Thought Leadership Session 1 : Getting Closer to the Customer - at the InterSection of Cloud, Mobile and Analyticsf:id:blue_9:20160229000622j:plain

この5つのLessonsはビジネスだけでなく、研究でも使えそうな気がする。

Lunch

f:id:blue_9:20160229000902j:plain
国籍・文化の違う人達が集まってご飯を食べることは初めてだったので、
料理もそうだし、食事マナーとか面白いなと思った。

Cognitive Service Management for Hybrid Cloud
Thought Leadership Session 2 : Cognitive IoT - The New Leadership Agenda
Solution EXPO Reception

様々な企業やIBMの技術のブースが出展。
ビールも飲み放題!
いろいろと回って、Tシャツやステッカーを手に入れた。(めちゃくちゃ嬉しい!)
f:id:blue_9:20160307153535j:plain

2日目

HSBC's Transformation to a Centralized, Worldwide Operations Center
General Session Day 2 : IT Transformation

f:id:blue_9:20160229004141j:plain
watsonの話があったり。
f:id:blue_9:20160229004247j:plain
ホテル予約アプリをAPIを連帯させて作成するデモをしたり。それにしても便利だなー。

Thought Leadership Session 3 : Security at the Speed of Cloud

f:id:blue_9:20160229005952j:plain
セキュリティの話。クレジットカードの暗証番号を盗まれた人が結構いて驚いた。
アメリカでもセキュリティー技術者が足りないらしい。
Watsonに技術者のスキルを教えこませたらねっていう話は面白かった。

Rise of the Machines : IBM Watson and Robotics

Robotf:id:blue_9:20160229012422j:plain
Robotのお話。
講演者のhacker感が印象的だった。

Thought Leadership Session 4 : API economy

f:id:blue_9:20160229012930j:plain
「破壊するより破壊される者になれ」

3日目

Thought Leadership Session 5 : DevOps & Open Technologies - Innovate Like a Startup, Scale for the Enterprise

f:id:blue_9:20160229014206j:plain
良い言葉。

General Session Day 3 : Personal Transformation

f:id:blue_9:20160229020313j:plain
RunkeeperのCEOが登場。
「情熱を持つことが大事」
「学生が未来、テクノロジーを作りデータサイエンティストになることを期待する」

f:id:blue_9:20160229020812j:plain
「IoTは意味あるものに」
「データを如何にアクションにするか」
「what if → 何か意味あるものにできないか。」

f:id:blue_9:20160229021442j:plain
見た目がすごいおじいちゃん登場!変人に違いないw
でも、言ってることはすごい。
「情熱を失わないために、仕事に遊びを入れる」
「遊び仲間を見つけろ」
「難しければ難しいほど遊ぶ」
「経験をコミュニティに還元するのが工学学士のやり方」

楽しそうに熱く語っている姿がかっこよかった。

EXPO

午後はEXPOの見学ツアー。
知らない技術がたくさんあった。
IoTや人工知能の発展は本当にすごいし、未来がそこにあった。
f:id:blue_9:20160229031109j:plain
世界に2台しかない、透明のZ13も見せてもらった。

Elton John LIVE

f:id:blue_9:20160229031422j:plain
夜はElton Johnのライブ!
最高、本当に最高!
素敵な夜でした。

4日目

Demonstrating How the Insurance Industry Transformation Can Leverage the IBM Watson IoT Platform

f:id:blue_9:20160229031755j:plain

頭に端末を装着すると、その人がどのような動きをとったか判断するみたい。
人間のそれそれの動きにも特徴点みたいなのがあるのか?

EXPO

最後にもう一度EXPOを見て回った。watsonのAPIのデモを見せてもらったり、Oculus RiftでVRを体験してみたり、楽しかったー!知ってる単語並べて話しただけだったけど、皆さん優しく接してくれて有り難かった。

感想

普段、技術トレンドはネットの記事で情報を得るが、実用例を聞いたり、デモを見たりする方がよっぽど良い。
デモを見るとAPIの使い方が分かって、自分でもやってみたくなる。それに、実用例を聞くと大学の研究と企業の製品との間の橋渡しのところについて考えたくなる。
そして、プレゼン。圧倒された。観衆を壇上に惹きつける能力たるや。
内容と同じくらい見せ方も大事なのだなと思った。
特にJohn Cohnが楽しそうに熱く話している姿にはとても感銘を受けた。
コンピュータ・サイエンスを極めている人はかっこいい。

海外もイベントも初めてだったが、それゆえ触れるものすべてが刺激的だった。
共に参加した人は初対面の方だったが、とても興味深い人で、たくさん話をして色々と教えていただいた。
彼との出会いは僕の人生観に影響を与えるであろう。
このイベントを通して、新しい技術の開発とその技術を世の中に導入するところに興味を持った。前者は研究、後者は論文から実用の間のところ。
これからの研究に活かしていきたい。

本当に良い経験になった。また来年も参加したい。

「30日でできる! OS自作入門」 開発環境構築 for mac

ふとしたことがきっかけでOSを勉強してみようと思った。
もう少しパソコンの内側を知りたい。
コードがコンパイルされてからの先をもう少し知りたい。
それならOSを作りながら学べば良いのではと思った次第である。

大学の講義でOSは学んだことはあるが、コードは一切出てこないし理論だけだったので面白くなかった。
だからコードを書きながらOSを学べる本が良かったので、この本を図書館で借りてきた。

30日でできる! OS自作入門

30日でできる! OS自作入門

さて勉強しようと思ったが、この本はwindows向け。最近、macを手に入れwindowsを手放した矢先のことであった。
しかし!なんと!macでも勉強できるようにしてくれている人がいた!
github.com

だが、ここに書いてあるようにやってもできなかったので少しメモ。

まずは、僕みたいに図書館で借りてきたのでCD-ROMがないという人!
30日でできる! OS自作入門
ここにあります。"HariboteOS.iso"ってやつです。

次に2.シェルスクリプト実行の項。

curl https://raw.github.com/sandai/30nichideosjisaku/master/bin/install.sh | sh 

をターミナルで実行せよとあるが、これをやっても上手くいかない。
そこで、このページのgitリポジトリをダウンロードし、その中のbin/install/install.shを実行する。
そして、次のように表示されれば成功。
f:id:blue_9:20160108192607p:plain
その後は3.確認の項にあるようにすれば同じように動くはず。



参考文献
OS自作入門 その5 - 勉強覚え書き

IBMメインフレーム・コンテスト2015

2015年12月10日をもって、メインフレーム・コンテスト2015が終了した。
www-06.ibm.com

10月に大学の後期が始まり、掲示板を確認しに行ったときに張り紙を見て知った。
それから申し込みをして、約2か月取り組んだ。

コンテスト通して思ったことをまとめようと思う。

メインフレーム

メインフレーム」。アーキテクチャ系の講義の「コンピュータの歴史」で聴いたことがあるような・・・。
張り紙を見た時に「プログラミングにチャレンジ!」と書いてあったから、参加してみただけで、正直メインフレームが何か良く分からなかった。
学生向けのコンテストであるが、現在の学生はコンピュータ=パソコン世代なので、知っている方が珍しいに違いない。そして、学生でそれを触ったことがある人なぞ、さぞいないだろう。
というわけで、このコンテストでは初めにメインフレームについてのpdfが配られる。
しかし、そこには少しの説明しかないし、コンテストを終えてみても少し分かったような・・・。
メインフレーム - Wikipedia
詳しくはwikipediaを見るのがいい。
ざっと述べると、企業や銀行などで使われるシステムを動かすための基盤のコンピュータ。高額でハイスペックなコンピュータ。

メインフレームコンテスト?

IBMが主催するメインフレーム・コンテストは世界中40ヵ国で開催されている。日本での開催は初めてとのこと。
そういうわけで、問題文が全て英語。これを知ったときは、ビビった。だって、「プログラミングにチャレンジ!」って日本語で書いてあったじゃん。
しかし、そこは仕方ないと割り切り問題を解くことにした。
このコンテストはPart1、Part2(17問)、Part3(16問)から成り立っている。Part1はコンテストの説明くらいで、問題を解くのはPart2から。
問題を解くといっても、このコンテストは一問一問解きながらメインフレームを理解しよう!というスタンスらしく、各問題には、メインフレームに使われている技術や歴史の説明と課題文があり、参加者は説明を基にしながら課題を解くといった具合だ。
Part2よりもPart3の方が難しいとあるが、難易度は変わらない。簡単なのもあれば、難しいのもある。
では実際にどんな問題がでるかというと、これが幅広い。C・C++JavaCobol・Assemblerなどの言語から、SQLJSON・MongoDBなどのDBに関するものから、JCL・Linuxコマンド・Z/OSコマンドから、いろいろと出題される。
CobolやDBなんて、学生は使ったことない。ほとんどの技術が授業で少しやったことがある程度で、やんわりとしか分からない。
このような感じで正直なところ、「コンピュータスキル・コンテスト」という方が正しい気がする。
そして、最後にこれらの知識の集大成として、JavaSQLを使ってプログラムを作成する。

感想

このコンテストは、よく分からない技術について英語の説明文を読んで、問題を解く。客観的に見てすごいと思うし、自分自身よくできたと思う。
大学3年の後期で何か成せねばなと考えていたときだったので、張り紙を見た時に、これで上位に入賞しようと思ったのがきっかけだった。
根気よく初めてみたものの、この問題を解いても意味があるのだろうか?コンテストで入賞して意味あるの?随時そんなことを考えていた。そして、Part2を解き終わってPart3に進むときやめようと思った。しかし、それから10日ほど経ってからPart3を解くことに決めた。中途半端にしたくないなという気持ちと純粋に問題を解くことが楽しかったから。それからは諦めることなく問題を解き進めた。
コンテストを終えて思う事は、良く頑張れたなということ。英語も得意な方ではないが、調べながらでも書いてあることが理解できたし、初めて知る技術についても、経験則を利用してすぐに身に付けることができた。そして、問題の大半がこれまで大学で勉強してきたことで、自分にも力が付いたのだなと実感することができた。これは尊い経験となった。
コンテストの解答には自信があるし、上位入賞は狙っている。アメリカにも行く気でいる。しかし、それ以上にコンテストで得られたものが大きかった。
自分も力が付いてきているし、社会で戦えることが分かった。自分は何者でもないし、力が欲しいと思って、大学で通っているわけだから、力が付いたことが分かったのはとても自信になる。大学からコンピュータについて学び始めたことは遅いことだと思っていた。しかし、それでもたくさん勉強したことで、コンテストでも戦えるくらいになれたし、やってきたことは間違いではなかったようだ。
IBMメインフレーム・コンテスト2015。参加して良かったと思う。



P.S.
このコンテストは普段は触れることがないような技術に触れることができる素晴らしい機会だと思う。社会の基盤となっているものこそ、学生が接する機会が少ない。だからIBMさんにはとても感謝している。これを機に、他のところでもこのようなコンテストや勉強会などを開催して、学生が経験できないような技術に触れることができる機会を設けていただきたい。

Rails ルーティング設定

Ruby on Railsのメモ。

Ruby on Railsを使うことになり、Rubyの勉強から始めた。そして、Rubyについて分かったきたので、下記のサイトでRailsの勉強を始めた。

www.rubylife.jp

一つ問題。コントローラとアクションの作成とルーティングの設定 - Ruby on Rails入門の「ルーティングの設定」でroutes.rbに

Books::Application.routes.draw do

  match 'hello' => 'booklist#hello'
  match 'bye' => 'booklist#bye'

end

と記載するとあるが、この通りにすると、
f:id:blue_9:20151212011103p:plain
と表示される。よく分からないが、"match"ではなくて"get"を使えとのこと。ということで変更する。

Books::Application.routes.draw do

  get 'hello' => 'booklist#hello'
  get 'bye' => 'booklist#bye'

end

f:id:blue_9:20151212011917p:plain
希望通りに表示された。


なんとか解決したが、routes.rbにおける、matchとgetの違いが分からない・・・。分かり次第、追加記載しようと思う。

Common LispでFizzBuzzを解いてみた

Ruby FizzBuzz最短コードメモ (51bytes) ネタバレ注意 - Qiitaを見て、Common Lispでは何byteで書けるかな?と思ったのでやってみた。
結論から言うと、あまり短いコードは書けなかった(技量的に)。しかしながら、面白いことを2つ発見したのでまとめておく。


負の剰余

Cで配列のインデックスを指定する場合や素数判定のプログラムを書くときに剰余演算子を用いたことはあった。そのときは正の剰余を想定して書いたので、負の剰余のことなぞ考えたこともなかった。しかし、上記の記事では負の剰余を用いており、ではCommon Lispではどうなるのかな?と思ったのでまとめてみた。処理系はCCL1.6。

n (mod n 15) (mod n -15) (mod -n 15) (mod -n -15)
1 1 -14 14 -1
2 2 -13 13 -2
3 3 -12 12 -3
4 4 -11 11 -4
5 5 -10 10 -5

rubyと同じようだ。他の言語では、どうなるだろう?

FizzBuzz

FizzBuzz問題を最短コードで書く場合"FizzBuzz"から、3の倍数なら"Fizz"を、5の倍数なら"Buzz"を, 15の倍数なら"FizzBuzz"を取り出すのが良いのではないかと考えた。そして、取り出すための関数として"subseq"を選んだ。すると以下のようになる。

(subseq "FizzBuzz" 0 4) => "Fizz"
(subseq "FizzBuzz" 4 8) => "Buzz"
(subseq "FizzBuzz" 0 8) => "FizzBuzz"

これを任意のnを与えてできないかと考えていたら、妙な数式が出来上がった。

(subseq "FizzBuzz" start end) 
start: (mod (mod (expt n 4) 15) 9)        ; exp(n,4) % 15 % 9 
end  : (+ (mod (mod (expt n 4) 15) -5) 8) ; exp(n,4) % 15 % -5 + 8

これを使うと、以下の様になる。

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
start 4 4 0 4 4 0 4 4 0 4 4 0 4 4 0
end 4 4 4 4 8 4 4 4 4 8 4 4 4 4 8
sebseq "" "" "Fizz" "" "Buzz" "Fizz" "" "" "Fizz" "Buzz" "" "Fizz" "" "" "FizzBuzz"

ほぼ数字遊びのような感じだが、うまく動くので何らかの数学的要因があるかもしれない。
しかも、これが面白いのは、3でも5でも15の倍数でもない値のときは""となるところだ。
だが、これをいざコードにすると、計算式が長い。また、3でも5でも15の倍数でもない値のとき、その数を返すわけではないのではないので、その値を表示させるには、さらに一工夫必要で、結果としてコードが長くなる。残念。


当初の目的であった、Common Lispで最短でFizzBuzzを解くというのは達成できなかったが、なかなか面白い発見はできた。Common Lispで最短FizzBuzzはひとまず止めるが、Common Lispの技量が上がったらまた解いてみようかな。また、新しい言語の取得の一環として最短でFizzBuzzを解くというのは、良い訓練ではないかと思った。