tshimizu's diary

日々の記録

組み込みOS(第1回)

『12ステップで作る組み込みOS自作入門』という本を購入した。


以前から気になってはいたが、なかなか手を出さずにいたら存在を忘れてしまっていた。
再び購入意欲が高まった理由は、今期の大学のOSに関する講義があったこと、そしてバイト先(組み込み系の会社)に置いてあるのを見かけて思い出したから。
また、自分の中で不足しているかつ、欲しい知識として、アプリケーション層未満の階層での知識がある。
これは単純に自分の興味がそそられる部分でもあるし、将来的にもその方向で進んで行きたいという思いが最近大きくなっているからだ。
(あとこの動画を見たのも結構大きい。本当に楽しそうに話すので感動した。)


このような直接何かを作り出さない活動に、今のタイミングで時間を使うはどうかという考えが無いわけではないけど(「もっと実践的にカタチのあるものを作ってやりながら学び、実績を作るほうがいいかもしれない・・・」等)、「知りたい!やりたい!」と直感的に思えたタイミングでやるのが、経験的に一番吸収が良いので今すぐやる。
12ステップ、約500ページで少ない量ではないが、最後までさっさとやり遂げてしまいたいと思う。


ここから本題。
今回は初めてなのでステップ1の環境構築をやる。
現在まともに使えるPCがMacBookPro (Retina 13-inch、Early 2015)しかないのでこれを使う。
環境を作る手順は以下のサイトを参考にさせてもらった。
blog.livedoor.jp
書籍ではmacに関することは書かれていないので非常にありがたかった。


購入したケーブル等はすべて同じものを購入して問題なく使えた。
手順もほぼ同じように進めることができた。
ただし、ブログを書かれた方と使用しているgccの種類と設定等が違うようで、ブログには書かれていないエラーが発生したので少し言及する。


binutilsをビルドするとき

clang: error: unsupported option ‘-print-multi-os-directory'

という表示がされた。
調べてみたところ、このオプション‘-print-multi-os-directory'はコンパイル完了後に設定などをただ表示してくれるだけの機能なので、とりあえず無視したが、結果的に今のところは問題ない。
macgccLLVMでホントのgccじゃない(?)から云々・・・みたいなことが関係していそうだが、進めることを優先したいのでまた今度考えることにする。


以上、トラブルはこの程度で思っていいたよりもスムーズに、ステップ1は終わった。
新しく知ったことは、このブログに書くことを目標にこれから進めて行きたい。



12ステップで作る組込みOS自作入門

12ステップで作る組込みOS自作入門

「なぜ、あなたの仕事は終わらないのか」の感想

 この本はICPCでスポンサー企業の方からいただいたものだ。もとから気になっていたので、ありがたかったが、なかなか読む時間を作れず、昨日やっと読み終えた。いくつか印象に残った点があるのでここに記録しておく。


最初の2割の時間で仕事の8割終わらせる
 筆者はこのフレーズを本の中で何度も強調していた。目的は2つ。1つ目は、実際に取り掛かって難易度を認識し、かかる時間の見積もること。2つ目は、後半に心理的余裕を持たせて仕事のクオリティを上げること。(早く提出することではない!)1つ目に関しては、心から納得できた。ちょうど前回のゲーム作成において、取り掛かって初めて必要な仕事と時間が見えてくるということを実感していたからだ。2つ目は当然といえば当然である。わかっているけど難しいことだ。ただ、これも習慣の問題で、本の中で書かれていたように、同じ習慣は66日続けないと定着しないらしが、これは逆に言えばたった2か月さえ頑張れば自分のモノにできるということだ。

目的があれば勉強はたやすい
 別の言い方をすれば、「勉強のための勉強はするな」といこと。理由は簡単で、そんなものは続かないので身にならない。逆に、それが必要な場面になれば、「勉強」でなく自然と「調べる」。そして目的をたっせいするために、細かいことなど気にしないで、どんどん前進できる。これに関しても、自分が何度も体験してきたことだから納得できる。例えばPythonPHPを触ってみたことなど、もちろん無駄ではなかったと思いたいけど、必死になる明確な目的がないからから体には残らない。逆に、今やってるゲーム作りや、夏のインターンでのマイコンの作品などは、目の前に必ず形にしなければならないものが見えていたから自然と貪欲に努力できていた。

「まず作ってみる」が、世界を変える。
 これもゲームの企画や開発の初期段階でで、散々感じたことだ。アイディアは最低限動くものがあれば判断がしやすい。面白くなるかどうかの確信は、話だけの時よりもずっとしやすい。採用、不採用に関わらずとにかく判断が早くなる。また、先ほどの繰り返しになってしまうが、「モックアップ」が初期段階で存在しないと、必要な仕事が最初見つけずらいので、最後に焦ってたくさんの仕事をやることになってしまう。

朝が最強
 この理由に筆者が挙げていたのは、邪魔(LINE,メールなど)が入りずらいこと、そして外部要因の締め切りができることだった。1点目はいいとして、2点目については特に共感した。自分で決めた内部的要因などは簡単に破ってしまう。一方で外部要因に関しては、精神的にかなりの強制力がある。筆者の場合、それは家族が起きてくることらしいが、自分が体験したのは、人との締め切りである。これだと朝に限ったことだけではなくなるが、外部要因が効果的である点は同じだ。ただ、朝は早くにやると、講義の開始など確かに外部からの締め切りが多いので試してみたい。夜だと、いつまでもダラダラと続けてしまう。
 
 このように見ていくと、ここ2か月ほどでのチームでのゲーム作りから学ぶことは多かったのだなと改めて感じた。最近は、少し怠け気味なところがあったので、この本でまた気持ちが引き締まった。
 最近はこの手の自己啓発本を読みたいと思うことは少なくなっていた。以前は結構読んでいたが、多くの場合、読んでも何も変わらないと感じていたからだ。だが、今回は自分の経験と照らし合わせなながら、「あそこでああ考えたのは間違っていなかったんだな。」と答え合わせのような感覚で読んでいた。そのおかげで自分の、ぼんやりとした考えに自信が持てた。そして、これは特に自分が変わらなくてもたくさん読んでいたころからだが、自己啓発本のいいところは「元気が出る」ことだ。これは馬鹿にできない。何をするにしても、元気でなければ何かをやり始めるだけのの自信が出ない。自信なんていう根拠のないものは、こういう本によって「なんか行けそうな気がする」という気持ちになって獲得するものだと思う。以前岡田斗司夫が、自己啓発本のこのような効果について評価しているのを見て、当時は「自己啓発本なんて意味ないんだな」などと思ったが、今ならわかる。「元気が出る」のは本当に重要だ。だから、この本の最後の部分にある筆者の精神論的な熱い話も、自分には意味のあるものだった。なにせ元気が出る。

なぜ、あなたの仕事は終わらないのか スピードは最強の武器である

なぜ、あなたの仕事は終わらないのか スピードは最強の武器である

Ruby on Rails ファーストタッチ

友人とその先輩と自分の3人で、今月19日にRuby on Railsを使ったハッカソン的なものをすることになったので、Ruby on Railsの勉強を始めた。
先輩の方はWeb系の会社に就職決まっいて経験も豊富だそうだが、自分と友人はRailsを触ったことがない。
Railsはもちろん、Rubyも経験ゼロからのスタートで、短期決戦型の勉強になる。
webアプリケーションの開発経験もないので、本当にわからないことばかりなので、かなり苦戦が予想される。

とりあえず、「Ruby on Rails アプリケーションプログラム」という書籍の第二章まで、今日一通りやってみた。
Railsについて事前に調べたり、この本を立ち読みした時は、どういうものか本当に何もイメージできない状態だったが、
2章までやったところ、少しだけ全体像が見えてきた。やはり手を動かすことによる効果は大きい。

現在考えてる学習計画は次の通り。

1.「~アプリケーションプログラミング」を3章まで一通りやる。(残り3時間程度)
2.ドットインストールのRailsのレッスンを一通りやる。(2時間程度)
3.Webアプリ的なものを一つ作ってみる。(?)
4.友人との勉強会(12時間程度を一回)

また、Ruby自体の勉強も適宜入れていく予定(Rubyも未経験のため)
ちょうど来週に勉強会をする予定なので、そこまでにアプリが一つ作ることを目標にしたい。
また、学習過程でのルールも次のように決めた。

・学習したことは記録しておく。(キーワード、疑問点、ハマった事、学習時間など)
・わからないことがあっても、あまり突っ込みすぎて悩まないこと。(なんとなくわかったらとりあえず進む)

自分一人でのもくもくと学習を進める分、成果が目に見えない。
せめてもの目に見える結果として、学習の記録を残しておくことでモチベーションを保ちたい。
また2点目については、新しことを学ぶ上で最近重要だと感じることなので今回も実践したい。
気持ち悪く感じる表記なども、繰り返し書き続けると違和感がなくなる。
それによって本当に考えなくてはいけない部分に頭を使えるようになり、理解できることは多い。

新しいものに素早く適応する能力の重要性を、近頃感じることが多い。
今回はそれを磨く良いチャンスだと思うので頑張りたい。
STM32が行けたからこれも行けるハズ。


ゲーム開発(2本目)の反省

Unityによる2本目のゲームを先週リリースした。
前回は友人との2人体制での開発だったが、今回は自分が主導で主に3人で開発を行った。
この3人に前回の友人は含まれていないが、シーン遷移部分などを手伝ってもらった。
リリースは10月中の予定だったが、実際はかなりギリギリになってしまった。
今回の開発過程でいくつか反省する点があったので記録しておく。

反省点は大きく分けて3点。
それぞれについて説明する。

1.取り掛かりのスピード
2.仕事の振り方
3.報告の重要性

1.取り掛かりのスピード
開発に取り掛かり始めるのが遅かった。計画遅れのこれがすべての原因だと思われる。
なんとなくやる気が起きなくてモックアップを作り始めるのが、企画が決まってからだいぶ遅くなった。
ただ、実際にやり始めると、実装方法を楽しく、また意外とすぐに終わった。
モチベーションも上がるし、もっと早くやってしまえばよかった。

2.仕事の振り方
他の二人のメンバーに対して、仕事をうまく振れなかった。
週に1度のミーティングがあったが、ろくに仕事を振れずに終わることが2度ほど続いた。
友人には「お前の仕事の振り方は下手だ。」と言われたが、それよりも大きな原因があると自分は考えている。
モックアップを早く作らなかったことだ。
自分には必要なタスクが見えていなかった。振るべき仕事が自分の中では存在していなかったのだ。
モックアップを作り、さらに具体的な完成が見えなければ、いつまでに何が必要かを把握できない。
そのためには、できるだけ早く作り始めてみる、イメージ図を書いてみる、などをする必要があった。

3.報告の重要性
進捗をこまめに報告するのは、チーム全体の進度を確認するために不可欠なことは改めて確認できた。
しかし、今回学んだもっと大きなことは、「できないとき、やりたくないときは断る。」ということ。
安請け合いしてはいけない。誰かの負担が少し増えるよりも、頼んでおいたことが進んでないことのほうがもっと深刻だ。
また、自分で可能だと判断し、やりたいと思える仕事のほうが、責任感とやる気で効率は上がるしツラくない。


今回のプロジェクトは自分の不手際で、最後の方かなり苦しかったが、いい経験になった。
次に生かしていきたい。


ちなみに作ったのはこのゲーム。iOSAndroidの両方でリリース中。

play.google.com

ICPC2016アジア予選

ICPC2016アジア予選に出場した。
大会から1週間たってしまったが、完全に忘れてしまう前に、参加して感じたことを記録しておく。

会場にはたくさんの有名人が来ていた。
PFNの西川さん、秋葉さん、AtCoderのちょくだいさん、
そして同じ学生だけど既に競プロ界隈で有名な人などなど。
それだけですごく楽しかったし、大会に来た価値があったな、と思った。
しかし、すぐに自分が完全に芸能人に憧れる一般人のようになってしまっていることに気が付いた。
確かに憧れの感情はあって当然なんだけど、広い意味で同じ業界に進む人間として、
気持ちだけでももっと対等に構えておくことが必要なんじゃないかとも考えた。

1日目の懇親会では、偶然お話した方が、実はフォロワーだったりした。
こいうサプライズは、まだ規模の小さい競プロ界ならではの楽しさだと思う。

2日目の最後のイベントでは、懇親会のように食事を食べるだけだと思っていたが、
スポンサーのブースがたくさんあり、それぞれでイベントやプレゼントなど祭りの様で面白かった。
また、知らなかった企業の説明なども聞けたのは良かった。

英語力不足を改めて実感した。特に読むスピードと聞き取りに問題がある。問題を読むのに苦労したのはもちろん、
ステージ上の人が言った(であろう)ジョークに、自分だけ理解できなくて笑えない経験はつらかった。

コンテストそのものについての感想は「いつも通り」という感じ。
自分の競技中の仕事は、Aを通したこと、Bのデバッグの手伝い、Cのアルゴリズムを聞いて実装。
チームとしては最終的に4完(A,B,C,D)だった。
順位としては36位(45チーム中)で、順位表凍結までは2完で最下位だった。
この凍結システムがなかなか面白く、結果発表の時はかなり盛り上がり、
ぎりぎりで2問通したうちのチームもその恩恵を受けた。

ICPCは素直に楽しいイベントだったし。良い刺激にもなった。
競技時間5時間も、予行練習の時は果てしなく長く感じたけど、本番ではあっという間だった。
ただ、自分の実力が大会に見合っていないのは常に感じていた。
来年も参加したい気持ちはあるが、一番の問題は実力。
メンバーは人数だけならなんとかなるだろうが、そのメンバーに実力は期待できないだろう。
来年も予選を突破するためには、先輩が抜けることを考えると、自分が引っ張っていける実力を付ける必要がある。
また、大学の先生の協力についても不安はあるが、これは何とかなりそうだ。
今回協力していただいた研究室以外はどこも無理だと思っていたが、現在講義でお世話になっている教授が、
ICPCの運営にかかわっていたこともあるそうで、理解してもらえた。
自分の大学ではICPCに協力的な雰囲気は感じられなかったので、これは非常にうれしかった。

早めに今後の成長のための計画を立てていきたい。

競プロの記録 (2016_10_02)

No.39 桁の数字を入れ替え - yukicoder

入力数Nをstringとして受け取る。
まず、先頭の数字を指定し、その数字より大きいものが無いかを
、後ろのほうから見ていく。
この時、できるだけ大きなものと入れ替えたい。
このような動作を、指定する数字を先頭から順に試していき、
一度でも入れ替わりが起これば終了とする。
以上のように、実際は貪欲に調べればいいだけだったのだが、
自分の提出は、文字列を数値に直す関数をわざわざ作り、また全通り試していた。
今回は組み合わせの数が少ないので、これでもACだが、あまり賢くない。

No.40 多項式の割り算 - yukicoder

先頭(D次の係数)から順に、A[i-2]=A[i], A[i]=0 としていくだけ。
この計算順を、逆にかいていたことで時間ロスしてしまったのが反省点。
また3次で割っていることから、あまりは高々2次になることをすぐに気が付きべきだった。

No.44 DPなすごろく - yukicoder

解いてから気が付いたが、要はただのフィボナッチ数列
フィボナッチ数列が最もシンプルなDPだと考えられるということだろうか。

B予選まであと8日。

競プロの記録 (2016_10_01)と、英会話

今日も星2を1問解いただけで終わってしまった。
非常にまずい。
考えてダメだったら、すぐに解答をチラ見する方針で、
また解き始めるのを恐れないようにする必要がありそう。
要はすぐに手を動かせというハナシ。

No.36 素数が嫌い! - yukicoder

入力Nの、素因数の次数が3以上ならば、
そのうち2個の積(素数でない)でNを割り切ることが可能。
合成数Xは、p<=√X を満たす素因数pを持つ』つまり、
Xが合成数なら、素因数は・・・・・??
書きながら、考えがおかしいことに気が付いた。
ACだけど嘘解法かもしれない。
今日は遅いので、また明日やる。

B予選まであと9日。

(その他)
今日はレアジョブ(オンライン英会話)の体験レッスンを受講した。
講師の方がかなりゆっくり話していてくれているのはわかったが、それでも聞き取るのが難しかった。
焦るし、緊張するしで大変だったが、このような感覚は久しぶりで、
頭をフル活用している感じがした(競プロとは違う方向で)。
英語学習の意味だけでなく、脳に負担をかける意味でも効果的なようだ。
「度胸」のようなものをつけることの必要性を、ずっと感じ続けているが、そのためにも頑張りたい。
具体的な目標としては、来年8月の対留学で、スムーズに会話できるようになること。