- 勉強してるけど、いまいちコンピュータってよくわからない?
- プログラマになったけど、どう考えればいいのかわからない?
- これからのスキルアップってどうやってやればいいんだろう?
- 何か大きなことをやりたいけど、自分は何ができるんだろう?
こんなモヤモヤってありませんか?
わからないから悩む、悩むから諦める、これではなかなか前へ進めません。 わからないことが理解できれば問題解決につながるかもしれません。 さらに理解が深まれば、色々なアイデアも浮かびチャンスが見えてきます。
今日はそんなコンピュータの「決まり事」と「アイデア」のお話をしていきたいと思います。
コンピュータの世界は決まりだらけ
コンピュータは0と1
この業界の人なら誰でも知ってる有名なお決まりです。
日頃触っているPCや、スマフォ、仕事で書いているプログラム。全て0と1です。
- レンタルDVDで「ドクター・ストレ○ジ」を見る
- 仲の良い友達にメールを送る
- 明日の会議のプレゼン資料を急いで作る
- 家に帰って買ってきたゲームをする
- 綺麗でカッコいいWebページを作成する
- amaz○nで欲しかったフィギュアを注文する
でも安心してください!
DVDを再生する時の「決まりごと」
- レンタルDVDを借りて再生ボタンをクリック
- DVDからデータを読み込んで、動画の形式を判定
- 対応するコーデックをロード(仮にH.264形式の動画とします)
- PCの性能とメモリの空き具合を判断してリングバッファを初期化
- 先頭からVCL構造のデータを読み込んでフレーム判定
- IフレームとPフレームを判定しながらリングバッファに書き込み
- コーデックはバッファからフレームを取り出す
- 量子化やエントロピー符号化、離散コサイン変換等をして解凍
- 描画するタイミングをFPSで調整
- Iフレームの場合は全体の画像を描画
- Pフレームの場合は直前のフレームから差分のみを変換して描画
- 以下、次フレームから5~10を繰り返し・・・
その他の機能としては、
- 一時停止とかは適当に止めますw
- 音声も同じような感じでFPSで調整しながら再生
- 途中再生はクリックされた直前のIフレームから書き込み
- NAL構造に字幕(クローズドキャプション)があれば字幕を書き込み
等々・・・
仕組みがわかってくると・・・
動画再生についてはMPEG4とかH.264、チャンク構造やリングバッファの仕組みを理解していれば動画を見る時も色々考えながら見ることができます。最近は映画もネット配信されたりしているので、ネットワークの勉強やサーバの勉強をしてストリーミングサーバの技術(RTP:Real-time Transport Protocol)を勉強してみたりするのも楽しいと思います。
こんな感じで「決まり」や「しくみ」が理解できてくれば、色々なアイデアが浮かんでくるかもしれません。
- 掲示板は「文章」を書き込むけど、動画を同じようにネット上に書き込み (アップロード)して、世界中の人に公開できないだろうか?
- アップした動画にブラウザから入力された文字をクローズドキャプション(字幕)として書き込みできれば、色々な人が動画に意見を言えるようになるのでは?
- さらにリアルタイムにストリーミングサーバのバッファに書き込んだらどうだろう?
- 字幕設定で文字サイズや色、流れるスピードを指定できるようにしたらどうだろう?
これを考え出したのが有名なドワ○ゴのサービス「ニコ○コ動画」です。
仕組みとアイデアの関係
ここで重要なのは「ニ○ニコ動画」の作者は、動画の形式を作った訳でもないし、字幕の仕様を考えた訳でもないし、ストリーミングサーバを作成した訳でもないということです。
ただ、H.264の字幕の仕様やストリーミングの仕組みを理解して、文字を移動させたり色を変えたりできることがわかったので、それを流れるスピードや色の属性を付けたデータとしてストレージに保存して、リアルタイムにストリーミングサーバのバッファに書き込む「アイデアを考えただけ」です。0から仕組みを考えるのは難しいことですが、既にある技術でも組み合わせるだけでもすごい可能性があります。
まとめ
創造できるエンジニアになるためには、仕組みを理解して色々な「引き出し」を用意して、アンテナを張っておくことがとても重要になります。
- 自分は業務アプリのSEだからゲームの技術は必要ないや
- 自分はWeb作成を中心にしているから機械的な仕組みは知らなくてもいいや
- 自分は機械制御のエンジニアだからサーバの知識はなくてもいいや
ではなく、一度周りで動いているプログラムやシステムをどういう仕組みで動作しているか、頭の中で考えてみると楽しいと思います。「決まり事」や「仕組み」は、ネットを検索すると色々出てきます。
初心者向けに簡単に説明しているサイトもあれば、RFCやISOで定義されているような原文を詳細に解説しているサイトもあります。私がオススメするのはなるべく原文に近い資料を読んで理解することです。詳細な仕様であればあるほど「可能性のスキマ」が見えてくるかもしれません。