第20回オープンソーステクノロジー勉強会「Plan 9について」にいってきました
Plan 9について
産業技術総合研究所研究員 高野了成(@oraccha)さん
UNIXに影響を与えたもの
すべてがファイル
- すべての資源は名前を持つ
- バイトストリームの open-read-write-close
ファイルメタファ
Windowもファイル
- page /dev/screen でスクリーンショット
rio window system
- /dev/^(cons mouse window)をプロセス毎に多重化するファイルサーバ
- cat /dev/mouseして マウスを動かすと連動して数字が羅列される
- 誰でもカーネルにアクセスできるか?
- rootユーザはない物理的に壊れるがネットワーク越しにとられない分散を前提
- window system とosが密結合に見えるが?
- rio以外のwindow sysemもOK
- ユーザ管理は?
- authentication serverが必要だが、stand aloneではそんなこともない
- /net
cat /net/tcp/clone 10 cat > /net/tcp/clone connect 204.178.31.32
ネットワーキングAPI
軽快なPlan9
- @go_vmさん
- 仮想計算機の研究
想定環境
VM上でのCPU動作
- 速度等の問題から、通常ゲストOSのコードも実CPUでそのまま実行される
- いちいちエミュレートすると遅い
こまること
VMXを有効にすると
- CPUの中に2つの世界がつくられる
- VMX-root mode
- いままでの世界
- VMX-non root mode
- すべての センシティブ命令がトラップ可能
- VMX-root mode
- VMX-non root modeでguest osを動かせばうまくいく
日本最大級Railsサイトの裏側見せますvol.2〜クックパッド&食べログ
行ってきました、ただのメモです
聞き違え等間違っているところは多々あると思います
クックパッドインフラ
キャパシティプランニング
ユーザが快適に使えるために
- 分析
- キャパシティを知る
- ユーザが快適に使えなくなる限界値を知る
- 限界値を知る
- 予測
- ユーザが快適に使えなくなる限界値を知る
- 予測日を知る
- ユーザが快適に使えなくなる限界値を知る
サーバ増設のスピードアップ
- OSインストールスピードアップ
- ミドルウェアインストールのスピードアップ
- database.yml,my.cnf
- 以前はcapistranoで
- puppetを導入
- サーバの状態管理ツール
- Manifestで管理する
- 学習コストが高い
- 手間はほぼ0だが
質問
- 仮想化は?
- 以前はVMWare
- Manifestファイルのサイズ
- 200行
- 日々の平均の2倍耐えられる位
食べログで動いている大石さん作のライブラリ
自作ライブラリの必要性
- 必要な機能を持つライブラリがない
- 無いなら作る
- 食べログのニーズに合わない
- 仕様にぴったり
- 開発が止まっている
- メンテナンス早い
ActsAsReadonlyable改
TabelogAsync
- 非同期処理ライブラリ
- backgroundrbをつかていた
- 時々暴走
- backgroundrbをつかていた
- 特徴
- mongrelを通さない
- 堅牢性
TabelogAsync::Thrower.send( :class => :async_log,:args => "good" )
- 設計思想
- 軽くてすぐに終わって同期が不要な大量の処理を
- 思い処理も回すようになった
- シングルスレッドなので遅延が。。。
- 重い処理利用サーバと軽い処理用サーバで分けている
Hadoopの効果
- 7000時間->30時間
質問
- Amazon EC250台とあるが、一ヶ月にどれくらいのインスタンスを起動どれくらい費用がかかるのか
- ずっとつけっぱなしではない必要な時だけ
- 会社全体で使っている10万から40万
PCI-Express型SSDとMySQL
SSDについて
クックパッドサーバー、クライアントのボトルネック調査と高速化
- lambda {|diary| lambda { diary.succ! } }.call(hatena)
- ピーク時のレスポンスタイムを200msec以下にする
問題
- ページキャッシュ、アクションキャッシュ導入済み
- フラグメントキャッシュは可読性の問題で導入していない
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に下がった
- screenshot.jpでチェック
- クライアントサイド
- 表示完了まで1sec以上掛かっている
- asset id がAppサーバごとに異なる
- appサーバ毎にタイムスタンプがバラバラ
- GitのログからRAILS_ASSET_IDを設定
- Ajax高速化
- 本番環境で計測
- 測定は重要だ
質問
Rails遅い/MySQLが速
- どこが遅い
- production.logに吐かれるのを拡張
- RailsLogger#benchmark
- production.logを取り込んで解析するツールを自作
- 犯人は
- 広告!!!
- タイムアウト
- 広告を一部外して対応
- 営業サイドと交渉
- ログを見せて納得
質問
- ログ運用の対策
- ファイルサイズに気を付ける
- debug logとか出さない
BRIDGE2009にいってきた
未踏の方のデモ、プレゼンを始めてみましたが、とっても刺激になりました
仮想世界に直接触れる画像認識技術
- NTTDocomo 山添さん
- 法人営業
- 未踏の人
- 物理シミュレーション+画像認識
- 直接リアルとバーチャルの画像を合成
音程補正フィルタbozark
- mixiラジオの人
- 音楽の補助輪
- 音楽は聴くもの->作るもの
- bozack
- ユーザの演奏に介入
- 不協和をとりのぞく
- フィルターが勝手に調和度が高い音に組み替える
プレゼンテーションツールShadowgraph
- 08年度下期スーパークリエーター
- 村田さん @yuichi1004
- 電子プレゼンテーションにOHPの概念を取り込む
- プレゼンテーション画面上にバーチャルペンで書き込める
音声付箋を貼り付けられる VoiSticky
- 米沢さん
- 仮想空間のバルーンにユーザの声と頭の方向を使って音声メモの付箋を貼り付ける
手書き作図インターフェースPangaea
- http://pangaea-sketch.com/
- 西川さん
- 手書きで書い->認識されてきれいな直線になる
- イラストレータのファイルになる
Accessibility for DHTML
引っ張ると音が鳴るツールの紹介
- PIRAMIさん
- プロのミュージシャン
- チェリスト
- Vox - Understand the News
人方ロボットのための演技指導xxx V-sido(ぶしどう)
- IVSで準優勝
- リアルタイムに思い通りの動きをさせたい
- 激しい動きをしても、転倒しない
リアルタイムWeb時代を見据えたtwitterマッシュアップの取り組みの紹介
- f-shinさん(movatwitterの人)
- ペーパーボーイの人
- F's Garage @fshin2000
- 広告ビジネスがリアルタイムについていけてない
- 事前審査が必要
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)))))
- マクロ
????
あとで勉強する
- マクロと関数どっちが早いか
- コンパイル式のCommon Lisp等はマクロの方がはやいが処理系による
開会宣言
卒論で作ったMicro Lisp(1976)
- intel 8080 上で動作する極小Lisp
1980年ころのLisp事情
1980年ころの日本のコンピュータ事情
1980年ころの日本のLisp事情
-
- 中西 慶応 KLISP (TOSBAC 3400)
- 安井 阪大 OLISP(NEAC)
- 竹内、奥乃 NTT LIPQ ,LIPX(PDP-11)
- 後藤、金田 東大 HLISP( HITAC 8800/8700)
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)
- データ型の表現
- 基本的にはポインタタグ
- ポインタのさす先のデータ型をポインタ内にもつ
- 上8bitは型情報、残り24bitがアドレス
- データ型の判定にメモリAddressが不要
- 基本的にはポインタタグ
- 組み込みデータ型
- タグ(型情報)割り当て
- signかunsignかを上手に割り当て
atom(x):x >= 0
symbolp(x):x>=7000
質問
- UtiLispのNILはどのように表現
- atomとして実装
- 30年も前の実装のことをどのように思い出したか
- kUtiLispで満足いかなかったところ
- 現在だったらポータビリティを重視してただろう
- Common Lispの評価は?
- Common Lispが出たときには既にLisp開発者じゃなかったので 評価できないが、
- 機能がたくさんついているが、それを誇示しているような印象をうけた
- collerは何個渡すか知っている,colleeは引数何個が最大化を知っている
ここで電池切れ
感想
- Lispってlambdaというものさえあれば条件分岐も繰り返しもかけてすごい
- 数もlambdaであらわせる->チャーチ数
- 本体部分のimplementは意外と簡単に実装できるらしい
開発環境整備
- JDK1.6
- http://java.sun.com/javase/downloads/index.jsp
- Platform:Windowsを選択
- jdk-6u16-windows-i586.exeをダウンロード
- インストール
- Eclipse 3.5
- Android SDK
- http://developer.android.com/sdk/index.html
- http://developer.android.com/sdk/download.html?v=android-sdk_r3-windows.zipを選択
- C:\Program Files\android-sdk-windowsに展開
- C:\Program Files\android-sdk-windows\SDK_Setup.exeを起動
- Settings>Force https://.. sources to be fetched using http://を選択
- Available Packages でRefleshを押下
- 全部にチェックを入れる
- Install Selectedを押下
- Accept Allをチェック
- Install Acceptedを押下
- インストール
- ADT PluginをEclipseにインストール
- Eclipseを起動
- Help>>Install New Software
- Work with にhttp://dl-ssl.google.com/android/eclipse/を入れてAdd押下
- Reflesh押下
- Developer Toolsを選択 Nextを2回押下
- I accept the terms of the license agreementsをチェック
- Finishを押下
- 色々WarningがでるかもしれないがOKを押下
- Eclipse再起動
- Android SDKとEclipse結びつけ
- AVD Manager(エミュレータ)
- 実機と接続
- HelloWorld
日本Androidの会10月定例に行ってきた
海外のAndroid状況
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に下がってしまった
- 描画速度の改善
- 1アプリケーションあたりのメモリ
- 描画領域は最大で8MB
- テレビのFullHDだと軽く超えてしまう
- 起動してもメモリ確保ができずに起動失敗
- 描画領域バッファを8MB以上にする
- 描画領域は最大で8MB
NativeApplicationでの問題
- C/C++で記述したLinuxNativeアプリケーションのこと
スポットメッセージの紹介(ADC2登録アプリ)
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*
SharedID
- 共有を指定したSharedPreferenceも,ContentProviderも
基本的には全アプリに公開されてしまう
↓
- ユーザIDで共有するアプリケーションを限定する
- ただし同じ署名がされてないと共有不可能
AIDL(Service)
- 画面の状態に依存せずに処理を実行可能
- バックグラウンドの処理に向いている
- AIDLファイルからJavaのインターフェース等を自動生成される
Androidxxx
LT
- Mobile Platforms & Web Browsers
- 周辺情報検索アプリケーションLocoscapeについて