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を解くというのは、良い訓練ではないかと思った。

Common Lispで初めて実装

夏休みに入ってからM.Hiroi's Home Page / xyzzy Lisp ProgrammingとPAIPでCommon Lispの勉強をしている。
基本的には例題のコードを写して、実際に動かすといった具合だ。

夏休みも終わるなーと思っていた先日、「もし大学4年間が24時間だったら、現在は何時何分だろうか」と思った。
プログラムを書こうと思ったときに頭に浮かぶものはC言語C言語以外でプログラムについて考えたいと思って、Common Lispを始めたので、
「いかん、いかん、Common Lispで考えろ!」と自分に言い聞かせながら、一通り書いてみた。

(defconstant *hour* 24 "A day is 24 hours")
(defconstant *minute* 60 "A hour is 60 minutes")
(defconstant *second* 60 "A minute is 60 seconds")
(defconstant *day* 365 "A year is 365 days")
(defconstant *school-year* 4 "University is 4 years") 
(defvar *each-month-days* '(30 31 30 31 31 30 31 30 31 31 28 31) "Days of each months(April start)")

(defun StudentDays (year date day)
       "Days of student life"
	   (let ((days (* 365 (1- year)))
		 (date2 (mod (+ date 8) 12)))
	     (if (or (> day (elt *each-month-days* date2)) (< year 1) (> year 4)) (return-from StudentDays -1))
	     (dotimes (i date2 days)
	       (setf days (+ days (elt *each-month-days* i))))
	     (setf days (+ days day))))

(defun PrintTime (second)
       "Print 'hour:minute:second'"
           (if (< second 0)
               (format nil "error")
	       (progn (format nil "~s:~s:~,2F" (truncate (/ second 3600)) (truncate (mod (/ second 60) 60)) (float (mod second 60))))))

(defun StudenTtime (year data day)
       "Total seconds of student life"
       (let ((seconds (/ (* *hour* *minute* *second*) (* *day* *school-year*))))
	     (printtime
	      (* seconds (studentdays year data day)))))
(StudentTime 3 10 3)
"15:6:24.66"
(StudentTime 3 3 3)
"17:32:23.01"
(StudentTime 5 10 3)
"error"
(StudentTime 5 10 32)
"error"

しかし、初めて関数型言語で書いたので、関数型言語のスタイルが分からない。Common Lispも多くのコードに触れていないので、Common Lispのスタイルも分からない。そこで、今後のために現在の疑問を挙げようと思う。

・大域変数は"*変数名*"というスタイルであるが、定数の場合はどうなるのであろう?(今回はとりあえず、大域変数と同じスタイルにした。)
=>アスタリスクは付けないようだ。(2015/10/02)

スペシャル変数の名前は、最初と最後にアスタリスクを付けるのが慣習だが、定数の場合は通常この慣習に従わない。理由は、アスタリスクを付けると、「要注意!このレキシカルスコープの外側で何かによって変更されるかもしれない」と解釈されるからだ。もちろん、定数は変更されない。


Peter Norvig(2010) 「実用Common Lsip」翔泳社 149pp.


・計算結果を出力する際にPrintTimeで出力をしたが(1)、PrintTimeでは出力文字列を返すだけにして、呼び出し元(StudentTime)で表示するべきか(2)?

(1)

(defun foo ()
  (hoge))

(defun hoge ()
  (format nil "hoge"))

(2)

(defun foo ()
  (format nil "~S" (hoge)))

(defun hoge ()
  'print)

・Lispboxでは日本語が対応していないのでコメントも英語で書いてみたが、正しいか分からない。コメントの英語が正しいかチェツクする方法はあるのか?(とりあえずは英語のコメントにたくさん触れ、その中で身に付けていこうかな)


C言語取得の際は多くのコードに触れたことと例題のコードばかり写してないで、自分で一から創り上げたことが良かったと思うから、Common Lispでもそうしたい。また、人工知能にも興味があるから、その辺を絡めていけばよいのではないかと思っている。

ブログを始めるにあたって

プログラミングを始めて2年が経った。大学で情報系の学部に進学して授業で習い始めたのがきっかけだった。
それまで、全くプログラミングに触れたことはなかったし、周りにプログラミングをする人もいなく、C言語という言葉も大学に入ってから知ったくらいプログラミングはかけ離れた世界のものであった。

もちろん始めたころは苦労した。どうやって動いているかも謎だった。ようやく、半年過ぎたあたりから授業の問題が簡単に思えてきた。しかし、そのころはC言語で文字列処理や数値計算ばかりで自分が想像していたプログラミング(アプリとかweb系とか)とは違うものであり、授業でプログラミングを学んで何が創れるのだろう?と疑問に思った。

それから、授業以外でもプログラミングを勉強するようになり、いろいろ創ったり、プログラミングコンテストの問題を解いたりした。そこでたくさんのプログラムを書く中で、たくさんのエラー出し、たくさんのエラー内容を確認した。

エラー内容が分からずに検索したそんな時、行きつくのは、過去に同じエラーをだして、その解決法を載せているたくさんのブログだった。そこには有益なことが書いてあり、たくさんの知識をいただき大変お世話になった。

そのおかげで、始めたころからは想像もつかないくらいに上達した。


そして、2年が経過して思うことは、これまでに取得してきた知識を可視化したら、膨大な量になったであろうなってこと。また、自分がたくさんのブログにお世話になってきたように、自分のエラーが誰かの参考になれば嬉しいなってこと。


そこで、このブログを始めようと思った。

有益な情報を公開する

 これまたよいことは、役に立つおもしろい情報を集めて選り分け、それをWebページにしたり、あるいは FAQ (Frequently Asked Questions lists)のような文書にすることです。そしてそれらを一般公開することです。
How To Become A Hacker: Japanese

果たして有益な情報であるか分からない(情報を集めて選び分けているわけではないので)が、一人の人間が時間をかけて悩んできたことがまとめられ、他人がそれを読んでより短い時間で解決できることは有益なことであると思う。