第20回オープンソーステクノロジー勉強会「Plan 9について」にいってきました

Plan 9について

産業技術総合研究所研究員 高野了成(@oraccha)さん

UNIXに影響を与えたもの
分散OS Plan9の全体像
  • 一回書いたら絶対消えないfilesystem
  • 電話線等でCPUサーバにアクセス
  • リソースにアクセスするには9pという共通のプロトコルがあり
Plan9の核となるアイデア
すべてがファイル
  • すべての資源は名前を持つ
  • バイトストリームの open-read-write-close
UNIX哲学の消え去り

ファイルの考えとはずれた

ファイルメタファ
  • UNIXはたいていのものがファイル
  • Plan9はすべてがファイル
    • /dev/cons/proc,network,interface,rio window system,http,ftp,環境変数
    • プロセス生成、ネットワークアドレス、共有メモリは違う
Windowもファイル
rio window system
  • /dev/^(cons mouse window)をプロセス毎に多重化するファイルサーバ
    • cat /dev/mouseして マウスを動かすと連動して数字が羅列される
  • 誰でもカーネルにアクセスできるか?
    • rootユーザはない物理的に壊れるがネットワーク越しにとられない分散を前提
  • window system とosが密結合に見えるが?
    • rio以外のwindow sysemもOK
  • ユーザ管理は?
    • authentication serverが必要だが、stand aloneではそんなこともない
  • /net
    • ネットワークもファイルとして抽象化
      • /net/ether0,/net/tcp,/net/udp,/net/dns
      • /net/tcp/0や/net/tcp/1は各コネクションを表している
      • catとかechoをつかえば echo server/clientができる
cat /net/tcp/clone
10
cat > /net/tcp/clone connect 204.178.31.32
ネットワーキングAPI
  • ネットワーク操作もファイルへのopen-read-wrie-closeで可能(Plan9にはioctlはない)
  • BSDソケットのように、専用システムコールは不要
  • 使いやすいライブラリ関数を提供
  • Goのdial APIPlan9からきてい
UNIXで動くPlan9環境
  • drawterm
    • UNIXからPlan9 CPUサーバに接続するためのグラフィカルターミナル
プログラミング環境
$ acme hello.c
#include <u.h>
#include <libc.h>

int main(){
  print("hello");
}
$ 8c hello.c
$ 8l hello.8
$ ./8.out
  • Plan9にはselect,epollのようなAPIがないがどうやってネットワークプログラミングをするのか?

軽快なPlan9

  • @go_vmさん
  • 仮想計算機の研究
軽快なPlan9ってなに?
  • 仮想計算機上でPlan9を動かしてみる 冊子
    • KVMの解説とVMの床抜き
想定環境
KVMについて
VM上でのCPU動作
  • 速度等の問題から、通常ゲストOSのコードも実CPUでそのまま実行される
    • いちいちエミュレートすると遅い
こまること
  • ゲストOSの命令でCPUの状態を書き換えてしまうような命令はホストOSで動かしてはだめ
    • CPUの命令には、実行をトラップできないとまずい命令
      • 特権命令:実行をトラップできる命令
      • センシティブ命令:実行をトラップしない命令
  • X86では特権命令のセットの中に入っていない、センシティブ命令がいくつかあるので工夫が必要
    • センシティブ命令を実行前に自動的に書き換える
    • 実行前に書き換える
  • Xenでは そもそもセンシティブ命令を発行しないようにOSをいじくる
    • 書き換えのコストがかかる
IntelAMD
  • 上記を解決するCPUの仕組みを開発
VMXを有効にすると
  • CPUの中に2つの世界がつくられる
    • VMX-root mode
      • いままでの世界
    • VMX-non root mode
      • すべての センシティブ命令がトラップ可能
  • VMX-non root modeでguest osを動かせばうまくいく
KVMによる仮想化
  • KVMはCPUのvmx命令群を呼ぶだけ
  • 周辺機器のエミュレーション:qemu
  • cpu実行:カーネル空間
Plan9 on KVM
  • ゲストのPlan9がそとのネットワークに出る方法がわからない
    • Plan 9上のユーザプロセスから、直接ホストのLinuxに通信をお願いすればよい
      • そこ抜き
KVMを改造
  • 書き取れませんでした
  • vmcall.s
MOVL b+0(FP).BX
.
.

詳しくは
http://circle.paravirt.org/c77

http://labs.gree.jp/Top/Study/20100210/Report.html

日本最大級Railsサイトの裏側見せますvol.2〜クックパッド&食べログ

行ってきました、ただのメモです
聞き違え等間違っているところは多々あると思います

クックパッドインフラ

キャパシティプランニング

ユーザが快適に使えるために

  • 分析
    • キャパシティを知る
    • ユーザが快適に使えなくなる限界値を知る
      • 限界値を知る
  • 予測
    • ユーザが快適に使えなくなる限界値を知る
      • 予測日を知る
サーバ増設のスピードアップ
質問
  • 仮想化は?
  • Manifestファイルのサイズ
    • 200行
  • 日々の平均の2倍耐えられる位

食べログで動いている大石さん作のライブラリ

自作ライブラリの必要性
  • 必要な機能を持つライブラリがない
    • 無いなら作る
  • 食べログのニーズに合わない
    • 仕様にぴったり
  • 開発が止まっている
    • メンテナンス早い
ActsAsReadonlyable改
  • 概要
  • 問題
  • スレーブ1台が壊れるとFailOverしない
  • 改造点
    • スレーブが死んだら自動的に切り離す機能を追加
      • MySQL::ConnectionErrorで検知して外す
  • 良かった点
    • 気軽にDBを落とせる
    • DB落としても
TabelogAsync
  • 非同期処理ライブラリ
    • backgroundrbをつかていた
      • 時々暴走
  • 特徴
TabelogAsync::Thrower.send(
   :class => :async_log,:args => "good"
)
  • 設計思想
    • 軽くてすぐに終わって同期が不要な大量の処理を
    • 思い処理も回すようになった
    • シングルスレッドなので遅延が。。。
    • 重い処理利用サーバと軽い処理用サーバで分けている
WordScoop
  • 公開されている
  • キーワード検索ライブラリ
gem install word_scoop
  • 公開する場合は英語で
質問

クックパッドHadoopで 分散処理

Hadoop導入理由
  • たべみるで使う
  • データ量が多い
    • GROUP BYが多い
    • GROUP BYが重い
    • SQLでやると7000時間==一年くらい?
Hadoop概要

cookpadでのHadoop利用

  • Hadoop Streamingを利用
    • Javaで使い易いがStreamingを使うと多言語でOK
  • EC2で50台
  • HDFSはS3

Hadoopの効果

  • 7000時間->30時間
質問
  • Amazon EC250台とあるが、一ヶ月にどれくらいのインスタンスを起動どれくらい費用がかかるのか
    • ずっとつけっぱなしではない必要な時だけ
    • 会社全体で使っている10万から40万

PCI-ExpressSSDMySQL

SSDについて
  • HDDより高速
  • Random accessに強い
  • エンタープライズ向けSSDが出てきている
    • コンシューマよりも高価
    • IBMとかEMCとか
    • 導入事例も多い
    • テストもされている
    • はてなとかも使っている
  • PCI-Express
    • 高価
      • 128GB 14万
    • 対応ドライバが必要
    • Writeの性能があまりでない
    • I/Fよりも高速
ベンチマーク
環境
結果

クックパッドサーバー、クライアントのボトルネック調査と高速化

問題
  • ページキャッシュ、アクションキャッシュ導入済み
  • フラグメントキャッシュは可読性の問題で導入していない
Web
  • muninでモニタリング
  • apache access_logを集計
  • 250-300
App
  • production.logをモニタリング
DB
  • MySQL Tritton
  • appサーバのproduction.log
  • スロークエリ
  • FiveRuns
Web<->Appをからてをつける
  • passengerをつかう
  • Ruby Enterprice Edition
    • メモリはかなり減った
    • 起動時にすべてのFileを読み込む
    • Memcacheのコネクションが共有されてしまう問題
      • マニュアルに解決策あり
  • mod_deflate
    • 以前レイアウト崩れが発生
    • HTMLのみ
    • IE6,Firefoxのみ
  • レイアウト崩れ対策
    • screenshot.jpでチェック
      • 一部導入から全体へ
    • 150-200msecに下がった
  • クライアントサイド
    • 広告とか動的に書き込むところはAjax
    • Ajaxの遅延を改善
  • 表示完了まで1sec以上掛かっている
  • asset id がAppサーバごとに異なる
    • appサーバ毎にタイムスタンプがバラバラ
    • GitのログからRAILS_ASSET_IDを設定
  • Ajax高速化
    • onloadは遅い
    • headerでリクエストを送信
    • footerで描画
    • BBvFlashbackの不レム数で測定
    • 200msec以上Ajaxが高速
  • 本番環境で計測
  • 測定は重要だ
質問
  • 200msec以下の理由
    • ユーザにとって快適
    • Googleの目標値が100msecだから
  • たまにとんでもないのはあるか
  • レスポンスタイムの寄与
    • 広告のクリック率はわからない
    • ユーザ数が増え続けけている
  • フレーム数 BB Flashbackはだれが発想
  • CDNはつかっている
    • すでに使っている
    • リクエストの9割はCDN
  • CDNはどこつかっている?
ボトルネック特定の為のログ解析
Apache遅い/Railsが速
  • どのAPサーバ?
  • HTTPレスポンスヘッダ
  • X-Runtimeを使う
    • RailsログのTotalと同じ時間
  • X-AppServer(食べログで拡張)
    • Apサーバのホスト名:Mongrelポート番号
    • railsでheaderに出す
    • Apacheのログに吐き出すように設定
  • 結果
  • 誰が犯人
    • mongrel?
      • HttpServer#process_clientの処理を細分化
    • 結果
      • Socket#writeで時間がかかる
      • 最高300秒
      • passengerを検討
Rails遅い/MySQLが速
  • どこが遅い
  • production.logに吐かれるのを拡張
    • RailsLogger#benchmark
    • production.logを取り込んで解析するツールを自作
  • 犯人は
    • 広告!!!
    • タイムアウト
    • 広告を一部外して対応
      • 営業サイドと交渉
      • ログを見せて納得
質問
  • ログ運用の対策
    • ファイルサイズに気を付ける
    • debug logとか出さない

BRIDGE2009にいってきた

未踏の方のデモ、プレゼンを始めてみましたが、とっても刺激になりました

仮想世界に直接触れる画像認識技術

  • NTTDocomo 山添さん
  • 法人営業
  • 未踏の人
  • 物理シミュレーション+画像認識
  • 直接リアルとバーチャルの画像を合成

音程補正フィルタbozark

  • mixiラジオの人
  • 音楽の補助輪
    • 音楽は聴くもの->作るもの
  • bozack
    • ユーザの演奏に介入
    • 不協和をとりのぞく
      • フィルターが勝手に調和度が高い音に組み替える

プレゼンテーションツールShadowgraph

  • 08年度下期スーパークリエータ
  • 村田さん @yuichi1004
  • 電子プレゼンテーションにOHPの概念を取り込む
    • プレゼンテーション画面上にバーチャルペンで書き込める

音声付箋を貼り付けられる VoiSticky

  • 米沢さん
  • 仮想空間のバルーンにユーザの声と頭の方向を使って音声メモの付箋を貼り付ける

手書き作図インターフェースPangaea

Accessibility for DHTML

  • 川中さん
  • IBM東京基礎研究所の人
  • Webを視覚障害者が使いやすいようにすることを目指している
  • Webを解析してアクセスしにくい箇所を発見する
  • コンテンツ製作者に修正を依頼するのは時間がかかる->自分で修正できる

みんなでつくる携帯イーラーニングサイト

  • うち勉がライバル
  • 早稲田の人
  • Wikipediaの問題集バージョン

引っ張ると音が鳴るツールの紹介

人方ロボットのための演技指導xxx V-sido(ぶしどう)

  • IVSで準優勝
  • リアルタイムに思い通りの動きをさせたい
  • 激しい動きをしても、転倒しない

リアルタイムWeb時代を見据えたtwitterマッシュアップの取り組みの紹介

  • f-shinさん(movatwitterの人)
  • ペーパーボーイの人
  • F's Garage @fshin2000
  • 広告ビジネスがリアルタイムについていけてない
    • 事前審査が必要

VRAVATAR

  • 山 健太郎さん
  • 株式会社ワンパク
  • ChaMap MA4最優秀賞
  • 地図にリアルタイム音声合成メッセージを
  • MA5審査中
  • TRAVATAR
  • 公開後 一週間でユーザ数 55,000
  • TRAVATARをインストールしたiPhone同士がすれ違うとアバターがうつってどんどん旅をしていくアプリ
  • TRAVATAR
  • 今後はtwitter連携や行った先とのコラボ

Shibuya.list TT #4に行ってきました

Lisp入門

  • 広域変数定義はdefine
(+ 1 2)

この+は演算子ではなく関数

  • 広域変数定義はdefine
(define a 1)
  • 変数上書き
(set! a (+ a 1)) 

set!は変数上書きkk

  • ローカル変数
(let ((x 1) (y 2) (+ x y)))
  • 関数定義もdefineで
(define (add3 n ) (+ n 3))

nは引数
(+ n 3)は関数本体

    • > function add3(n){return n+ 3 }のようなもの
  • quote

(quote (add3 1)) -> 省略 -> '(add3 1)
quoteで定義した式は値として認識される
"実行されない"

  • シンボルa,b,cってなに?
    • 変数や関数名のようなもの
  • carとは
(car '(1 2))
1

S式の先頭の要素が出力される

  • cdrとは
(car '(1 2))
2

S式の先頭の要素を除いたものが出力される

  • consとは

聞き逃した。。。

  • 階乗計算をしてみよう
(define (fact n)
         (if (= n 0)
           1
         (* n (fact (- n 1)))))

if関数の第一引数は条件、第二引数は 条件に合致した場合の処理(この場合は1) 第三引数は条件に合致しない場合の処理

  • S式をhtmlにコンバートする関数を作ってみよう
(define (print-html e)
    (if (list? e)
      (begin (format #t "<~a>" (car e))
        (print-html-list (cdr e))
        (format #t "</~a>" (car e)))
      (display e)));S式ではなかったら出力
(define (print-html-list l)
    (if (null? l)
      (begin (print-html (car l))
        (print-html-list (cdr l)))))
  • マクロ

????
あとで勉強する

1980年前後のLisp事情とUtiLisp

卒論で作ったMicro Lisp(1976)

実装
  • 16ビットをアドレスとして扱えるレジスタは1組だけ
    • car/cdrとるだけでも大変
  • Lispではまずcarを処理、cdrはあとでが多い
  • Lispのimplementはcdrの方を先のアドレスに書くことが多い
    • offset 0 はcdr
  1. HLレジスタペアをスタックにpush
  2. cdrをとってHLレジスタ
  3. HLの内容とスタックトップを交換
  4. carをとってレジスタ

1980年ころのLisp事情

  • Lisp 1.5(IBM 704;1960-)@MIT
    • Josh MacCarthy
  • Imterlisp(PDP-10;1967~)@Stanford
  • Maclisp(PDF-6/10;1970~)@MIT

1980年ころの日本のコンピュータ事情

    • 大学当で使っていたのはほとんど国産コンピュータ
  • 国内メーカが互換機を廉価(8割り引きくらい)で提供

1980年ころの日本のLisp事情

    • 中西 慶応 KLISP (TOSBAC 3400)
    • 安井 阪大 OLISP(NEAC)
    • 竹内、奥乃 NTT LIPQ ,LIPX(PDP-11)
    • 後藤、金田 東大 HLISP( HITAC 8800/8700)

修論で作ったPascal上のLisp

  • 占有して使える最大規模の計算機はFacom 230/38
    • 16bit x 64Kwordの空間が二つ(命令用、データ用)
  • Pascal処理系が多くのソフトベース
    • この上にLispを作ってみようと思った
  • Pascalのポインタは自由に操作不可能
    • ポインタはあるが、さす先を使えるだけ
    • heapを配列にとるので性能がでない
  • Pascal処理系のメンテナもしていた
    • Lispが使えるように言語仕様を変更
    • 秘密のオプションでポインタが増減できるように変更

UtiLisp

[http://gps.tanaka.ecc.u-tokyo.ac.jp/wadalabfont/pukiwiki.php?UtiLisp/C:title=UtiLisp( University of Tokyo Interactive Lisp)]

  • > utile = useful

各種の機能を整合性よく提供

    • 個別な機能とせず、なるべく一般化、ユーザ定義可能に
    • 可能なところは全て暗黙のprognに
  • 使いやすさを重視
    • オプショナル引数
    • マクロ機能
    • catch-throw
  • インタプリタ当基本部をアセンブラで(1980/7~12)
    • それまでのLisp処理系開発経験から、容易と判断
    • System/360系のアセンブラはかなり使いやすい
  • データ型の表現
    • 基本的にはポインタタグ
      • ポインタのさす先のデータ型をポインタ内にもつ
      • 上8bitは型情報、残り24bitがアドレス
      • データ型の判定にメモリAddressが不要
  • 組み込みデータ型
  • タグ(型情報)割り当て
    • signかunsignかを上手に割り当て

atom(x):x >= 0
symbolp(x):x>=7000

Lispの楽しさ

  • 気軽に構造を作って捨てられる
  • Lispはvon Neumann型言語
    • プログラムとデータを同じmemoryに格納
    • プログラムをデータとして扱える

Prologもプログラムとデータは同じ形式

  • 動作をPrologプログラムとして記述可能

質問

  • UtiLispのNILはどのように表現
    • atomとして実装
  • 30年も前の実装のことをどのように思い出したか
    • History of UtiLisp Hackingという論文をみた
    • 竹石先生のLisp記事をみる
    • それ以外はWikipedia
  • kUtiLispで満足いかなかったところ
    • 現在だったらポータビリティを重視してただろう
  • Common Lispの評価は?
    • Common Lispが出たときには既にLisp開発者じゃなかったので 評価できないが、
    • 機能がたくさんついているが、それを誇示しているような印象をうけた
  • collerは何個渡すか知っている,colleeは引数何個が最大化を知っている

ここで電池切れ

感想

  • Lispってlambdaというものさえあれば条件分岐も繰り返しもかけてすごい
  • 数もlambdaであらわせる->チャーチ数
  • 本体部分のimplementは意外と簡単に実装できるらしい

開発環境整備

日本Androidの会10月定例に行ってきた

海外のAndroid状況

  • @tao_gakuさん タオソフトウェア株式会社 代表取締役 谷口岳さん
  • 海外では多くの端末が出ている
  • 日本ではHT-03A(docomo)のみ
  • 2009/8 G-1,samsung galaxy,ht-03a ..の4機種
  • 9,10月でAndroid端末が一気に増える
    • US 11月の第4週-元旦まで ホリデーシーズン
    • 小売売上高の年間50%程度ホリデーシーズン
  • アメリカのキャリアが出す
    • Verizon Wireless
      • Droid(tao)
    • AT & T Mobility(iPhone)
    • Sprint Nextel
      • Hero,Moment
    • T-Mobile USA(Android)
      • Dream,Magic,Behold II ,Cliq
  • DoCoMo Andorid 1.6 アップデート!?

Androidの画面描画機構をチューニングする!

SurfaceFlingerとは
  • 画面アプリソフトウェアの中心
android app

|

Dalvik(JVM)

|

SurfaceFlinger

|

描画エンジン(OpenGL等)

|

Kernel FlameBuffer
  • 各アプリケーションに対し描画領域を割り当てる
SurfaceFlingerチューニング
  • 色深度
    • Androidは16bitカラーのみをサポート
    • 昨今は計帯電はをはじめ32bitカラーが要求されることが多いがその要求にこたえることができない
    • 16bit -> 32bit化させる
    • SurfaceFlinger -> FrameBufferの設定を修正する
      • FBIOGET_VSCRIININFOでFrameBufferから画面情報を取得
      • FBIOPUT_VSCRIININFOでFrameBufferを16bitに設定している<=ここを設定(PIXEL_FORMAT_BGRA_8888)
  • 描画速度の問題
    • 32bitカラー化により描画性能が1/10に下がってしまった
  • 描画速度の改善
    • Copybitライブラリ
      • ハードウェアアクセラレータを利用した2Dの描画エンジンライブラリ
    • OpenGLの汎用描画関数では一ピクセル毎に条件分岐をしているその部分を削ったら 5fps -> 60-70fpsに性能向上!
  • 1アプリケーションあたりのメモリ
    • 描画領域は最大で8MB
      • テレビのFullHDだと軽く超えてしまう
      • 起動してもメモリ確保ができずに起動失敗
    • 描画領域バッファを8MB以上にする
NativeApplicationでの問題
  • C/C++で記述したLinuxNativeアプリケーションのこと

スポットメッセージの紹介(ADC2登録アプリ)

  • 株式会社バンプール
  • 有川さん
  • URIで位置メッセージを仕掛けて、受信側がその場所に到達したら通知されるアプリ
  • URIなのでtwitterGMail等あらゆる方法で共有ができる
  • 苦労ポイント
    • Animation GIFに対応していない
    • LocationManagerのProxymilytiAlertが頻度が設定できない等つかいものにならない
    • SIMカードが刺さってないと位置情報の検知が難しい
    • 1.1->1.5になって制度が向上
情報
  • 11/30に Android Bazzarl Fall代々木青少年センター
  • Android有料アプリがダウンロードできないのはGoogle内部でいえない諸事情が、

ある日突然ダウンロードできるようになるので、待たないでどんどん出しちゃってください

Tokyo GTUG Night #3にいってきました

アプリケーション間連携のススメ

intent
  • プロセスやスレッドを意識せずに
  • Activityから 意図を伝えるボールのようなもの
    • 電話をかけたい->電話アプリ
    • 地図を見たい->地図アプリ
    • Componentは自分はなにができるというのを覚えておく
  • どのComponentか->URIで伝える
    • http://が渡されると->http://が処理できるComponent通常であればブラウザ
  • なにを(Data)か->MIMEで伝える
    • text/plain , image , audio 等

以下のでもをHT03-Aで見ると
http://www.grandnature.net/test/

  • 消防車の画像をクリックすると電話が起動し,一番したの画像をクリックするとStreetViewが立ち上がる


    • Androidでは一度Intentとしてシステムに投げている
  • 標準的なAction
    • SEND..データ共有のために用意されている標準Action
  • 独自定義Action
    • 受け取り側もその文字列をしらないといけない:合言葉的なもの
SharedPreferences*
  • 各アプリケーションはそれぞれLinuxの別々のユーザidを与えられている
  • アプリケーションの中で永続させたいもの
    • configとか
    • キーバリューで保存
    • 他のアプリからも参照可能
      • 設定を変える
      • ファイルパーミションを変えて実現してる
Content Profviders
  • 他のアプリケーションとデータ共有する仕組み
  • URIでアクセス(RESTful)
  • ソースコードサンプル
    • NotePad
SharedID
  • 共有を指定したSharedPreferenceも,ContentProviderも

基本的には全アプリに公開されてしまう

  • ユーザIDで共有するアプリケーションを限定する
    • ただし同じ署名がされてないと共有不可能
AIDL(Service)
  • 画面の状態に依存せずに処理を実行可能
  • バックグラウンドの処理に向いている
  • AIDLファイルからJavaのインターフェース等を自動生成される

Androidxxx

LT

Studio+i – Studio+i is a community of designers, researchers and engineers who are working on the integration of information technology to the architecture, city, and the society.