授業計画

2年前から母校で非常勤講師をしている。本業はまた別にあるのだがパートタイムの講師。

「学生に教える」ためには自分もきちんと復習しておく必要がある。分かりやすい授業をするために授業内容を整理する必要があり、それもまた知識の体系化に役立つ。教えるという偉そうなことを言いながらも半分は自己研鑽が目的である。

担当している授業の名前は「オペレーティングシステム」。自分が学生だった頃は、Andrew Tanenbaum的なOSの世界を勉強したのだが、今の学生は初めて触ったパソコンにすでにWindows3.1がインストールされていたという世代。昔はコンシューマ向けにはMS-DOSというOSがあり、その背後でUNIXのようなマルチタスクOSが大学で開発されていて、今だれでもマルチタスクOSが使えるようになっているのはすごいことなんだ!などと話しても年寄りの昔話にしかならない。学生がわくわくするような最先端につながる話をしたい。

ということで、OSの基礎から初めつつも最終的には今の最先端であるクラウドについて話しをしようということで毎年取り組んでいる。

去年の授業計画を引っ張りだしたところこんなようになっていた。

第1回 オリエンテーションオペレーティングシステムとは?)

第2回 オペレーティングシステムの基本機能

第3回 メモリ管理とディスク管理

第4回 プロセス管理とマルチタスク

第5回 プロセス間通信・ソケット通信とWebシステム

第6回 情報システム

第7回 情報セキュリティ

第8回 シェルとスクリプト言語(演習)

第9回 Webシステムの作成1(演習)

第10回 Webシステムの作成2(演習)

第11回 OSの機能としてのユーザインタフェース

第12回 代表的なオペレーティングシステムの歴史

第13回 特殊用途のオペレーティングシステム

第14回 分散オペレーティングシステム・仮想化

第15回 学力考査および解説

基礎編でOSの基本機能とlibc的なOSとのインターフェースについて話をして、途中の演習でRMIとしてのWebAPIを触ってもらい、最後の数回でクラウドについて話をするという構成。去年の反省点としては前半であれこれ詳細を教えるためにもたもたしてしまい、後半で深い知識を教えることができなかった。もう少し上手く体系を作ることはできないか。また、最近の世の中の動きで新たに話す必要がある重要なトピックはないか(「特殊用途のオペレーティングシステム」の回で携帯用OSについて話すのは良さそうだ)。
まだ時間はあるのでいろいろ思考中。

Flash10は速いかも

Flash10で新たに導入されたVector型を使ってfacekitのコア部分を書き換えてみた。

動きは以下のURLから、(要Flash10)
http://facekit.net/flash/flash10_test

こちらの旧バージョンと比較するとかなり速くなっていることがわかる(FPS表示はいい加減なので後で直す)。
http://facekit.net/flash/facekit_1

C/C++ to Flashコンパイラも発表されてFlash界隈がかなり面白くなってきた今日この頃です。
http://labs.adobe.com/technologies/alchemy/

ミーティングブラウザの動作デモ

先日の日記に書いたミーティングブラウザの動作デモを公開しました。
下記のURLから操作を体験できます。

http://unit.aist.go.jp/itri/itri-mi/MArc/demo/index.html
(要Flash9以上)

操作の様子の動画の高解像度版もこちらで公開しています。

http://unit.aist.go.jp/itri/itri-mi/MArc/Movie.html

ミーティングブラウザ

かなり更新していませんでしたが、今回も本業の話。

会議録コンテンツを自動作成するシステムMArcを開発&プレスリリースしました。

MArcは、Google Street Viewでも用いられているPoint Grey社製のパノラマカメラとマイクロフォンアレイを組み合わせたデバイスです。

音響処理技術と映像処理技術を用いることで

・発言者の方向の自動検出
音声認識による発言の文書化*1
・人物映像のオートパン

を行うことができ、短時間かつローコストで会議をアーカイブ化することができます。

パノラマ映像を円筒状にレンダリングする機能もあります。

操作している動画を以下から閲覧ください。

http://www.vimeo.com/2104484

ブラウザはflashで作成されており、OSに依存なく動作します。

視覚効果の生成には、Papervision3Dを用いました。ライブラリの作成チームに感謝します。

*1:自然対話の音声認識は現状かなり難しく認識率は完璧ではないがキーワードサーチには有効

login_engineをrestful_authenticationに移行する

railsが2.0になってしまった昨今、いつまでもlogin_engineを使っていると時代に取り残されそうなので、restful_authenticationへの移行を試みた。どうにか動き始めたので手順を公開。

まずはモデルを移行する。これには、db/migrateに以下のようなコードを入れておいて、rake db:migrateする。

class MigrateUsers < ActiveRecord::Migration
  def self.up
    rename_column("users",  "salted_password", "crypted_password")
    add_column("users", "state", :string, {:null => :no, :default => 'passive'})
    add_column("users", "remember_token", :string)
    add_column("users", "remember_token_expires_at", :datetime)
    add_column("users", "activation_code", :string, {:limit => 40})
    add_column("users", "activated_at", :datetime)
    add_column("users", "deleted_at", :datetime)
    User.find(:all).each { |user|
      if user.deleted != 0
        user.state = "deleted"
        user.deleted_at = user.delete_after
      elsif user.verified == 0
        user.state = "pending"
        #user.activation_code = user.security_token
      else
        user.state = "active"
      end
      user.save
    }
  end

  def self.down
    raise ActiveRecord::IrreversibleMigration, "Can't recover"
  end
end

ここで更に、login_engineとresful_authenticationでは、パスワードの暗号化の方法が違うので、app/model/user.rbを開いて、関数「self.encrypt」を以下のように修正する

修正前:

def self.encrypt(password, salt)
  Digest::SHA1.hexdigest("--#{salt}--#{password}--")
end

修正後:

def self.encrypt(password, salt)
  systemsalt = "your-salt-here"
  spassword = Digest::SHA1.hexdigest("#{systemsalt}--#{password}--}")[0..39]
  Digest::SHA1.hexdigest("#{systemsalt}--#{salt}#{spassword}--}")[0..39]
end

「systemsalt」となっている部分は、login_engineで

module LoginEngine
  config :salt, "your-salt-here"
end

として設定していた文字列と同じものにすること。

私の環境では、これで以前のアカウントデータでログイン可能になった。

Amazon S3がHTTP POSTをサポート

変化した部分を簡単に説明すると、今まではHTTPヘッダにシグネチャ情報をつけておかなければならなかったため、標準的なブラウザではアップロードすることができなかった。
今回の変更では、multipart/form-data形式でPOSTするときにシグネチャをHTTP Bodyに"signature"という名前で付加しておけばよくなる。
具体的に何がうれしいかというと、通常のフォーム形式を使って標準的なブラウザからファイルのアップロードが可能になること。

フォームを使ったアップロードのサンプルはこちら:http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html

Flashを使ったアップロードのサンプルはこちら:http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1092