2014年4月30日水曜日

ネットで授業を受けよう

iTunesUって使ってますか?

iTunesUは素晴らしいですね。いまやスマホ一つでスタンフォードやMITの講義を聞くことができます。

しかしよく聞くのは、始めは面白いと思ったけど途中でやめてしまった、といった話です。私自身も途中でやめてしまったコースは結構あります。

けしからんとか根性が〜という話に持っていくのは簡単ですがもう少し深く見てみましょう。

飽きてしまうのは、アウトプットの場がないからだと思います。人間が何かを学ぶには、インプットとアウトプットが必要です。数学とかでは顕著ですよね。証明を知るだけで実問題を解けることはなく、計算してみないと深く理解することは出来ない。逆に、講義しかない大学の授業というのは凡そ退屈ですよね。

iTunesUの授業の多くは講義しかないので、それ単体で学ぼうというのはかなり「根性」が必要ですし、やはり講義だけでは得られるものは少ないです。
当然ですがiTunesUが悪いという議論ではありません。iTunesUで学ぶなら、何か目的を持って、それの為に講義を視聴する、という使い方の方が賢いと思うということです。

ただ目的を持ってというには難しい分野も多々あるでしょう。でも教育機関で学ぶ機会もない、そういう場合はCourseraの方が便利だと思います。

CourseraはiTunesとは趣のことなるOpen Coursewareです。iTunesUがひたすらにオープンでハードルを低くし、教育機関は簡単に授業を出せるのに対し、Courseraは非常に学術的です。内容も難しい。けれど、

・応用課題を出してくれる

・フォーラムが充実していて質問するとすぐ返ってくる

・単位認定もされる

などなど、講義だけではなくアウトプットの練習も出来ます。フォーラムもかなり便利です。

目先に目的があって、それの為に学ぶならiTunesU、基礎分野だったりをしっかり学びたいならCourseraをお勧めします。

これ以外にもOpen Coursewareというのは五万とあります。もちろん大学に足を運んでの授業にしか出来ないこともいくらでもあります。色々なツールを使ってみるというのは、それ自体面白いことなんじゃないかと思います。

2014年4月28日月曜日

自動作曲所感

自動作曲ってどこまで可能なんでしょう。

今ある自動作曲というのもかなりのクオリティの「楽譜」を作ることができるようです。試したことのない方はこちらより試せます。

Orpheus

これらの、現状の自動作曲とは素晴らしい音楽をボタン一つで作製するというものではなく、簡単な音楽を簡単に作れるようにするというものです。

さて、とりあえず現状どんな用途がありますでしょうか。

上記のように簡単な音楽は本当にボタン一つで作れてしまいます。例えば面白いフリーゲームを作りたいけどBGMが作れないという時にはかなり便利だと思います。今まではフリー素材を使うしかなかったのに対して一応?オリジナルの曲を用意できます。

そういう意味で非常に意味のあるアプリケーションでしょう。一部の人しかできなかったことをオープンにするというのは気持ちのいいものです。

また、元々作曲をしているという人にも有用なもののようです。適当に作曲させて面白いフレーズが出てきたら自分の曲に使うことができます。

産業的なインパクトは結構大きくなっていくんじゃないでしょうか。だけれども「自動作曲」の名を冠するには大きな懸隔があるように思えます

…というのはクラシカルな音楽が好きな人間だけでしょうが、それでも言わせて下さい。

いまの自動作曲が単独でアートを作ることはないでしょう。アートというと表現するということですが自動作曲のアルゴリズムにそういうものはありません。(そもそもアルゴリズム単独でアートというのが可能なのか。)「元気な」とか「ロック」とかの指定は出来ますが。

CGにおける河口洋一郎先生のような方も出て来るかもしれません。しかしそれにはツールを設計するところまで含めてのプロセスになるでしょう。

また、作曲というのは音程とリズムだけではありません。そういう曲ももちろんいくらでもありますしそれらも音楽ですが、曲想や音色と切り離して音程・リズムがあるというのはちょっとしっくり来ません。現状このあたりは暫定的にツールが用意したパターンを引き出しているだけですが、これらもアルゴリズムで計算できないものでしょうか。

今の人工知能一般の限界として、人間が評価するものは人間の方がうまく作れるんでしょうね。将棋とかなら勝ち負けという与えられたルールがありますが、音楽において良い音楽というのを定式化するのは非常に難しいです。そもそも良い音楽を作るのが目的じゃないという人もいるでしょうし、うーん。

結局、クオリティを求める音楽は自動作曲をツールとして使っても人間が作ることになります。それでも万々歳ですがコンピュータの人としてはもう少し威張りたいものですね。


でもやっぱり、世界に一番インパクトを与えるアーティスト?というのは初音ミクになるでしょう。その初音ミクの楽曲に豊かさをもたらす技術というのはやはり偉大だと思います。

とりあえず10年後、どうなるか。

2014年4月26日土曜日

一人の開発でもGitを使おう

Gitを使っていますでしょうか?

Gitは版管理システムというものの一つで、簡単に言うとチームで開発するときにコードがこんがらがらないように一ヶ所にまとめて管理し、かつ各々が自由に開発できるという便利なシステムです。

元々はLinux開発の為にリーナスが一週間かけて開発したシステムだそうです。ので多くのオープンソースで使われております。つまり、オープンソースのように不特定多数の開発者間でも開発することを可能にする、頑強なシステムになっています。

そうすると一人の開発で使うものじゃないと思われるかもしれませんが、実はこれは一人での開発にも非常に役立ちます。どういうことかというと、例えば一ヶ月前・一ヶ月後の自分なんて他人もいいところだということです。

自分で書いたコードでもちょっと前のものだとよく分からなくなるというのはよくあることだと思います。また、ある変更を加えた後にやっぱり変更前のものの方が良かった、ということもあるでしょう。テキストエディタなら結構履歴が残っているものですが、この時点に戻したい、というのを探し出すのはかなり時間がかかります。加えてそれが複数のファイルに跨る変更だった場合、ファイル間の変更も同期させないといけない訳ですから、これは非常に面倒ですね。

そこで便利になるのが版管理システム、Gitです。単独での開発においてもGitを使うと何が便利なのかというと、


・「ここの時点のコードに戻したい」というのをすぐに戻せる。

・複数のファイルを同期して戻すことが出来る。

・GitHubにあげれば色んなパソコンで共有出来る。

などがあげられます。


ただ、Gitは使い方が難しいということで敬遠されがちです。最低限必要なコマンドが結構あり、かつコマンドの順序が定まっている部分もあります。ので習熟に時間はかかるでしょう。

なぜ難しいのか。それは「正しい使い方を簡単に、間違った使い方を困難に*」というインターフェイスの原則に従っているからです。つまり、何でもかんでも制御可能にしてしまうと共同開発には使えない訳です。ので、望ましくないコマンドを受け付けないことで頑強性を実現していると言う訳です。そして、一度正しい使い方を理解すれば非常に簡単に版管理システムを使うことが出来ます

最近では非常に明解なGUIが整備されています。WindowsならTortoiseGit, Linuxならcola-gitとか。

いずれどこかで使いますし、ここで覚えてしまっては如何でしょうか。



・参照リンク
Windows用GUI:TortoiseGitの使い方
サルでもわかるGit入門

Gitの構造・システムについて解説されている、入門Git。
サルでもわかるGit入門はコマンドの使い方等の説明は非常に丁寧なので慣れたらこれを読めばいいと思いますが、UIの説明に重心が寄っていて、Gitというシステム全体についての解説が薄いように思えます。Gitの設計を知ることこそGitを習熟する肝だと思うので、この本をお勧めします。





*「正しい使い方を簡単に、間違った使い方を困難に」というのはプログラマが知るべき97のことより。





2014年4月24日木曜日

ドロップダウン式ターミナル Guake

GuakeはLinux上でドロップダウン式に呼び出すことの出来るターミナルです。
F12ボタンを押すと非常に素早くターミナルウィンドウを呼び出すことが出来ます。


Guakeのよい所をざっとあげると、

F12を押すとすぐに出てくるので、他の作業をしているときにふとターミナルで操作をしたくなったときにパッと呼び出せる

・もう一度F12を押せばプロセスを切断せずにターミナル画面を引っ込められる

・ウィンドウが半透明なのでノートPCなどの小さいディスプレイでも扱いやすい


といった感じです。

特にターミナルを使い慣れていない方にお勧めします。なぜなら慣れていない人は、私もですが、ターミナルに慣れていないと「あれ、これどうやるんだっけ」と言ってgoogle検索しながら操作をするわけです。そうするといちいち画面を切り替えるのも面倒ですし、Referenceを見ながら作業をしたいという訳です。

そこでこのGuakeを使うと、さくさくと画面を切り替えられるし、必要に応じて半透明な画面を利用してWebページを確認しながらターミナルを操作することが出きるという訳です。


如何でしょうか。こうしたちょっとした工夫・イノベーションで開発効率は大きく変わると思います。


参照リンク
GuakeのGitHub
Wiki
デモ

2014年4月18日金曜日

はじめまして

どうも、陣内と申します。
ブログ始めました。

内容としては、進路に彷徨える東大生が主にプログラミングについて語らう場です。

プログラマを目指す仲間に色んな技術を紹介したいと思うので、それらに関する議論が出来ればうれしいです。俯瞰的に色々な要素技術に触れることを目的として、それぞれに深入りはしません。丁寧に技術的な説明をしているブログは多くありますが、特に独学で駆け出したばかりのプログラマが知っておくとよいものを紹介していきます。

なぜそのようなブログを立ち上げたかというと、大学という所は「情報科学」ということばかりしていて「プログラミング」にはなかなか触れないからです。大学ですから、科学をやるのはある意味当然ですが、視点を変えて、情報系に進む学生がやりたいことっていうのを考えてみると、科学よりもむしろエンジニアリング、プログラミングなんじゃないかと思うのです。そしてそれらの違いは結構大きい。

そこでこのブログの目的とは、プログラミング・エンジニアリングに興味があるけれどなにから手をつければいいか分からないという人の為に何を勉強すべきかという提案をすること、どのような面白いアプリケーションがあるのか情報共有することの2つです。技術に関してはTutorialのリンクやAmazonへのリンクを貼る程度で、内容は詳述しません。

今のところ話そうと思っている話題は以下です。

・「まず」アプリをつくろう
・Google App Engineをはじめよう
・Linux Ubuntuをはじめよう
・並列計算をはじめよう
・Git/GitHubをはじめよう

これらと、あと面白いアプリケーションの話題をしていきたいと思います。


と、いう訳で始めていきたいと思います。よろしくお願いします。

陣内