# HG changeset patch # User Nobuyasu Oshiro # Date 1315399407 -32400 # Node ID 7451f481250bf4f915da0c7ba027c8a9be70f281 add OSC presen diff -r 000000000000 -r 7451f481250b .DS_Store Binary file .DS_Store has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/index.html Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,595 @@ + + + + + + +2011/9/6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+ + +
+

Java による授業向け画面共有システムの設計と実装 +

+
  • 大城 信康 谷成 雄
  • +

    琉球大学 並列信頼研究室

    +
    +
    + + + +
    +

    目的と背景

    +
  • 大学の講義中、スクリーンに映されている画面は後ろの席程見えずらい。
  • +
  • その問題を手元のPCにも写せるようにすることで解決しようと考えた。
  • +
  • 60人以上での画面共有を行うことを目標とする。
  • +
    + +
    +

    VNCを用いての画面共有

    +
  • 画面を共有する方法 -> VNC
  • +
  • VNC: Virtual Network Computing
    ネットワークを介してコンピュータを遠隔操作するプログラム
  • +
  • VNCのリモートPCの画面を写す機能を利用する。
  • +
    + +
    +

    通常のVNCの問題点

    + + + + + +
    +

    + +

    +
    +
  • VNC Serverの負荷が重い。
  • +
  • Server側の通信網1本への通信負荷が高い。
  • +
    +
    + +
    +

    通常のVNCの問題点

    +

    +

  • + 1台と48台でVNCをかけた時のスループットとServer側のCPU使用率 +
  • +

    + + + + + + + + + + + + + + + + + + +
    スループット(単位:Byte)CPU使用率
    1台20M15%
    48台0.4M100%
    +
  • VNCに使われるCPUの使用率が100%になり、スループットが5分の1まで下がっている。
  • + +
    + + +
    +

    VNCの問題点の解決策

    +
  • +

    +
    + クライアント同士を接続させる +

    +
    + +
    +

    TreeVNCの利点

    +
  • クライアントが増えても負荷がある程度以上は掛からない。
  • +
  • 1本のEthernetへの負荷が減り、安定した通信できる。
  • + + + + + + + + + +

    +
    通常のVNCTreeVNC
    + + + +
    +
    +
    + +
    +

    TreeVNCの設計

    +
  • クライアント同士を木構造で接続させ、描画データをクライアントからクライアントへ転送させる。
  • +
  • 木構造を管理するTop Proxy(TreeVNC Proxy)が一台あり、このTop ProxyだけがVCN Serverへ接続する。
  • +
  • TreeVNCのクライアントは最初にTop Proxyに接続を行う。
  • + +
  • tightVNC ViewerのJava版(ver 1.3)を元にTreeVNCの実装を行う。
  • +
    + + + +
    +

    発表内容

    + +
    + +
    +

    RFB protocol

    +
  • Remote Frame Buffer Protocol :
    GUI操作によるリモートアクセス用の通信プロトコル。VNCで用いられる。
  • +
  • 転送される画面(フレームバッファ)のデータは変更があった部分(差分)だけが矩形単位で送られる。
  • +
  • キーイベントやマウスイベントも扱っている。
  • +
    + +
    +

    VNC のシーケンス図

    + + + + + +
    + + + +
  • 1~5までは使用するプロトコルのバージョン、認証方法、エンコーディング等の決定を行う。
  • +
  • 6からフレームバッファや、リモート操作の為キーボード・マウスの入力情報を行う通信が行われる。
  • +
    +
    +
    + +
    +

    RFB protocol

    +
  • FramebufferUpdateが描画のデータを転送する部分となる。
  • +
  • クライアントはFramebufferUpdateRequestで、VNC Serverへ関心のある領域についてリクエストを出す。
  • +
  • リクエストに対してのサーバの返信がFramebufferUpdateとなる。
  • +
  • Requestを出してupdateを受け取るということを繰り返し行い画面の共有を行っている。
  • +
    + +
    +

    RFB Protocol

    +
  • FramebufferUpdateRequestの内容
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    バイト数
    型   [値]
    説明
    1
    U8         3
    message-type
    1
    U8
    incremental
    2
    U16
    x-position
    2
    U16
    y-position
    2
    U16
    width
    2
    U16
    height
    +
    + + + + +incrementalについて + + + +
  • 0の場合、VNC Serverは指定された領域の矩形データを送ってくる。
  • +
  • 0以外の場合はその領域内で差分が発生した時に矩形データを送る。
  • + +
    +
    +
    +
    + +
    +

    RFB Protocol

    +
  • FramebufferUpdate
  • + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    バイト数
    型   [値]
    説明
    1
    U8         0
    message-type
    1
    U8
    padding
    2
    U16
    number-of-rectangles
    +
  • 以下number-of-rectanglesの数だけ矩形のデータが続く
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    2
    U16
    x-position
    2
    U16
    y-position
    2
    U16
    width
    2
    U16
    height
    4
    U32
    encoding-type
    +
    +
    +
    + + +
    +

    RFB Protocol

    +
  • 図を入れる
  • +
  • 指定された領域の矩形を更新しているのが分かる図
  • +
    + +
    +

    RFB Protocol

    +
  • RFB ProtocolにはFramebufferUpdateRequestだけではなく、キーボード・マウスポインタの入力を伝えるkeyEventやPointerEvent等もある。
  • +
  • TreeVNCでは画面の共有を行いたいのでそれらのイベントに対しての実装は行っていない。
  • +
    + +
    +

    負荷分散

    +
  • 負荷分散を行う上で重要: -> 転送するデータ量を見積もること
  • +
  • ネットワークの帯域やswtichにかかる負荷を把握するため。負荷を把握していないと負荷分散できているかどうかも解らない。
  • +
  • RFB Protocolで送られてくるデータ量: -> 先頭の20バイトを読むことで見積もることができる。
  • +
    + +
    +

    データ量の見積もり

    +
  • FramebufferUpdate(以下update)毎にデータを扱うためには、update1回分で送られてくるバイト量を知る必要がある +
    (どこまで読みこめば終わりなのか知る必要がある)。
  • +
  • 先頭の20バイトを読むことでupdate1回分のバイト量を知ることができる(厳密にはエンコード次第だが...)。
  • +
  • updateは最初に送られてくる情報に矩形の横と縦幅(width,height)が含まれていてそれと扱われるエンコードによって全体のデータ量を計算することができる。
  • +
    + +
    +

    データ量の見積もり

    +
  • ZRLEエンコードの場合
  • +
  • 最初の4bitにどれだけのデータ量が送られてくるのかという情報が送られてくる。
  • + + + + + + + + + + + + + + + + + + + + +
    バイト数
    型   [値]
    説明
    4U32length
    lengthU8 arrayzlibData
    +
    + +
      +
    • ZlibDataはgzipされたデータのこと
    • +
    • +
    +
    +
    + +
    +

    データ量の見積もり

    +
  • 先頭20バイトを読みupdate一回分のデータ量を調べる。
  • +
  • update1回分のデータを読み込み次のクライアントに送信する。
  • +
  • また、描画データを送信すると同時に画面の更新を行うようにする。
  • +
  • 描画データの管理はMulticastQueueで行った。
  • +
    + +
    +

    MulticastQueue

    +
  • MulticastQueueはjava.util.CountDownLatchを用いて実装されたクラスである。
  • +
  • クライアントから接続されると、データ転送用のスレッド(sender)が走る。
  • +
  • このスレッドは次に流すデータが来るまでは待機して置かなければならない。そして流すべきデータがくるとまた動き始めなければならない。
  • +
  • このスレッドの待機・解放を行うのがMulticastQueueとなる。
  • + +
    + +
    +

    MulticastQueue

    +
  • MulticastQueueの図を入れる。
  • +

    + + 接続されてきた時点からデータの送信が始まる。データは読み込まれるまでメモリ上に残っている。 + +

    +
    + +
    +

    MulticastQueueの問題点

    +
  • Clientがデータを読み込まないとデータが溜まりメモリを圧迫してしまう。
  • +

    + +

    +
    + +
    +

    MulticastQueueの問題点

    +
  • 解決策
  • +

    + +

    + +
  • TimeOut(TO)スレッドを走らせ、一定の時間データを読み込まなければ代わりにこのTOが読み込むようにする。
  • +
    +
    + +
    +

    TreeVNCのデモ

    +
  • では実際に動かしてみる。
  • +
  • +
    + +
    +

    エンコードの問題 

    +
  • ZRLE : Zlib Run-Length Encoding

  • データをZlib圧縮扱うエンコーディング。 +
    Macintoshでもこのエンコードは使うことができる。 +
  • Rawエンコードより約1/8倍少ないデータ量ですむ。
  • +
  • 解凍器(Deflater)は辞書を持っていて、その辞書を元に解凍を行う。
  • +
  • この辞書を吐き出す(flush)する機能がJavaにはなかった。
  • +
    + +
    +

    ZRLEの問題

    +
  • 解凍に必要な辞書を取り出すことができないため、ZRLEのデータはそのまま投げるだけでは正しく解凍されない。
  • +
  • そこで、VNC Serverへ接続するTop ProxyはZRLEで送られてきたデータを毎回新しく圧縮し直すという方法をとった。
  • +
  • 一度圧縮し直されたデータはそのまま流すことができる。よってクライアント側では圧縮し直す必要はない。
  • +
  • このエンコードはZRLEE(Economy)として扱うことにした。
  • +
    + +
    +

    TreeVNCの利点と欠点

    + +
    + +
    +

    テスト環境について

    +
  • CUI版のVNCクライアントを作成
  • +
  • 48台あるクラスタでCUI版のクライアントをはしらせてVNCをかけさせる。
  • +
  • 最初の1台目と50台めをGUI版のクライアントで接続を行い見比べてみる。
  • +
    + +
    +

    +
  • +
  • +
    + +
    +

    既存のプログラムとの比較

    +
  • VNC Reflector
  • + +
    + +
    +

    +
  • +
    + + + + diff -r 000000000000 -r 7451f481250b OpenSourceConference/index.html~ --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/index.html~ Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,557 @@ + + + + + + +2011/9/6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + +
    + + +
    +

    Java による授業向け画面共有システムの設計と実装 +

    +
  • 大城 信康 谷成 雄
  • +

    琉球大学 並列信頼研究室

    +
    +
    + + + +
    +

    目的と背景

    +
  • 大学の講義中、スクリーンに映されている画面は後ろの席程見えずらい。
  • +
  • その問題を手元のPCにも写せるようにすることで解決しようと考えた。
  • +
  • 60人以上での画面共有を行うことを目標とする。
  • +
    + +
    +

    VNCを用いての画面共有

    +
  • 画面を共有する方法 -> VNC
  • +
  • VNC: Virtual Network Computing
    ネットワークを介してコンピュータを遠隔操作するプログラム
  • +
  • VNCのリモートPCの画面を写す機能を利用する。
  • +
    + +
    +

    VNCによる画面共有の問題点

    +
  • 一極集中型の為、VNC Server(VNCされる側)の負荷が重い。
  • +
  • 1本のEthernetからデータを配信するため、クライアントが増えれば通信速度が落ちてしまう。
  • +

    + +

    +
    + + + +
    +

    VNCの問題点の解決策

    +
  • クライアントからクライアントへ描画データを転送することで問題を解決させるTree VNCの設計と実装を行った。
  • +

    +
    + クライアント同士を接続させる +

    +
    + +
    +

    TreeVNCの利点

    +
  • クライアントが増えても負荷がある程度以上は掛からない。
  • +
  • 1本のEthernetへの負荷が減り、安定した通信できる。
  • + + + + + + + + + +

    +
    通常のVNCTreeVNC
    + + + +
    +
    +
    + +
    +

    TreeVNCの設計

    +
  • クライアント同士を木構造で接続させ、描画データをクライアントからクライアントへ転送させる。
  • +
  • 木構造を管理するTop Proxy(TreeVNC Proxy)が一台あり、このTop ProxyだけがVCN Serverへ接続する。
  • +
  • TreeVNCのクライアントは最初にTop Proxyに接続を行う。
  • + +
  • tightVNC ViewerのJava版(ver 1.3)を元にTreeVNCの実装を行う。
  • +
    + + + +
    +

    発表内容

    + +
    + +
    +

    RFB protocol

    +
  • Remote Frame Buffer Protocol :
    GUI操作によるリモートアクセス用の通信プロトコル。VNCで用いられる。
  • +
  • 転送される画面(フレームバッファ)のデータは変更があった部分(差分)だけが矩形単位で送られる。
  • +
  • キーイベントやマウスイベントも扱っている。
  • +
    + +
    +

    VNC のシーケンス図

    + + + + + +
    + + + +
  • 1~5までは使用するプロトコルのバージョン、認証方法、エンコーディング等の決定を行う。
  • +
  • 6からフレームバッファや、リモート操作の為キーボード・マウスの入力情報を行う通信が行われる。
  • +
    +
    +
    + +
    +

    RFB protocol

    +
  • FramebufferUpdateが描画のデータを転送する部分となる。
  • +
  • クライアントはFramebufferUpdateRequestで、VNC Serverへ関心のある領域についてリクエストを出す。
  • +
  • リクエストに対してのサーバの返信がFramebufferUpdateとなる。
  • +
  • Requestを出してupdateを受け取るということを繰り返し行い画面の共有を行っている。
  • +
    + +
    +

    RFB Protocol

    +
  • FramebufferUpdateRequestの内容
  • + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    バイト数
    型   [値]
    説明
    1
    U8         3
    message-type
    1
    U8
    incremental
    2
    U16
    x-position
    2
    U16
    y-position
    2
    U16
    width
    2
    U16
    height
    +
    + + + + +incrementalについて + + + +
  • 0の場合、VNC Serverは指定された領域の矩形データを送ってくる。
  • +
  • 0以外の場合はその領域内で差分が発生した時に矩形データを送る。
  • + +
    +
    +
    +
    + +
    +

    RFB Protocol

    +
  • FramebufferUpdate
  • + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    バイト数
    型   [値]
    説明
    1
    U8         0
    message-type
    1
    U8
    padding
    2
    U16
    number-of-rectangles
    +
  • 以下number-of-rectanglesの数だけ矩形のデータが続く
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    2
    U16
    x-position
    2
    U16
    y-position
    2
    U16
    width
    2
    U16
    height
    4
    U32
    encoding-type
    +
    +
    +
    + + +
    +

    RFB Protocol

    +
  • 図を入れる
  • +
  • 指定された領域の矩形を更新しているのが分かる図
  • +
    + +
    +

    RFB Protocol

    +
  • RFB ProtocolにはFramebufferUpdateRequestだけではなく、キーボード・マウスポインタの入力を伝えるkeyEventやPointerEvent等もある。
  • +
  • TreeVNCでは画面の共有を行いたいのでそれらのイベントに対しての実装は行っていない。
  • +
    + +
    +

    負荷分散

    +
  • 負荷分散を行う上で重要: -> 転送するデータ量を見積もること
  • +
  • ネットワークの帯域やswtichにかかる負荷を把握するため。負荷を把握していないと負荷分散できているかどうかも解らない。
  • +
  • RFB Protocolで送られてくるデータ量: -> 先頭の20バイトを読むことで見積もることができる。
  • +
    + +
    +

    データ量の見積もり

    +
  • FramebufferUpdate(以下update)毎にデータを扱うためには、update1回分で送られてくるバイト量を知る必要がある +
    (どこまで読みこめば終わりなのか知る必要がある)。
  • +
  • 先頭の20バイトを読むことでupdate1回分のバイト量を知ることができる(厳密にはエンコード次第だが...)。
  • +
  • updateは最初に送られてくる情報に矩形の横と縦幅(width,height)が含まれていてそれと扱われるエンコードによって全体のデータ量を計算することができる。
  • +
    + +
    +

    データ量の見積もり

    +
  • ZRLEエンコードの場合
  • +
  • 最初の4bitにどれだけのデータ量が送られてくるのかという情報が送られてくる。
  • + + + + + + + + + + + + + + + + + + + + +
    バイト数
    型   [値]
    説明
    4U32length
    lengthU8 arrayzlibData
    +
    + +
      +
    • ZlibDataはgzipされたデータのこと
    • +
    • +
    +
    +
    + +
    +

    データ量の見積もり

    +
  • 先頭20バイトを読みupdate一回分のデータ量を調べる。
  • +
  • update1回分のデータを読み込み次のクライアントに送信する。
  • +
  • また、描画データを送信すると同時に画面の更新を行うようにする。
  • +
  • 描画データの管理はMulticastQueueで行った。
  • +
    + +
    +

    MulticastQueue

    +
  • MulticastQueueはjava.util.CountDownLatchを用いて実装されたクラスである。
  • +
  • クライアントから接続されると、データ転送用のスレッド(sender)が走る。
  • +
  • このスレッドは次に流すデータが来るまでは待機して置かなければならない。そして流すべきデータがくるとまた動き始めなければならない。
  • +
  • このスレッドの待機・解放を行うのがMulticastQueueとなる。
  • + +
    + +
    +

    MulticastQueue

    +
  • MulticastQueueの図を入れる。
  • +

    + + 接続されてきた時点からデータの送信が始まる。データは読み込まれるまでメモリ上に残っている。 + +

    +
    + +
    +

    MulticastQueueの問題点

    +
  • Clientがデータを読み込まないとデータが溜まりメモリを圧迫してしまう。
  • +

    + +

    +
    + +
    +

    MulticastQueueの問題点

    +
  • 解決策
  • +

    + +

    + +
  • TimeOut(TO)スレッドを走らせ、一定の時間データを読み込まなければ代わりにこのTOが読み込むようにする。
  • +
    +
    + +
    +

    TreeVNCのデモ

    +
  • では実際に動かしてみる。
  • +
  • +
    + +
    +

    エンコードの問題 

    +
  • ZRLE : Zlib Run-Length Encoding

  • データをZlib圧縮扱うエンコーディング。 +
    Macintoshでもこのエンコードは使うことができる。 +
  • Rawエンコードより約1/8倍少ないデータ量ですむ。
  • +
  • 解凍器(Deflater)は辞書を持っていて、その辞書を元に解凍を行う。
  • +
  • この辞書を吐き出す(flush)する機能がJavaにはなかった。
  • +
    + +
    +

    ZRLEの問題

    +
  • 解凍に必要な辞書を取り出すことができないため、ZRLEのデータはそのまま投げるだけでは正しく解凍されない。
  • +
  • そこで、VNC Serverへ接続するTop ProxyはZRLEで送られてきたデータを毎回新しく圧縮し直すという方法をとった。
  • +
  • 一度圧縮し直されたデータはそのまま流すことができる。よってクライアント側では圧縮し直す必要はない。
  • +
  • このエンコードはZRLEE(Economy)として扱うことにした。
  • +
    + +
    +

    TreeVNCの利点と欠点

    + +
    + +
    +

    テスト環境について

    +
  • CUI版のVNCクライアントを作成
  • +
  • 48台あるクラスタでCUI版のクライアントをはしらせてVNCをかけさせる。
  • +
  • 最初の1台目と50台めをGUI版のクライアントで接続を行い見比べてみる。
  • +
    + +
    +

    +
  • +
  • +
    + +
    +

    既存のプログラムとの比較

    +
  • VNC Reflector
  • + +
    + +
    +

    +
  • +
    + + + + diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/chillout.mp3 Binary file OpenSourceConference/mp3/chillout.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/club.mp3 Binary file OpenSourceConference/mp3/club.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/easy.mp3 Binary file OpenSourceConference/mp3/easy.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/electro.mp3 Binary file OpenSourceConference/mp3/electro.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/mini1.mp3 Binary file OpenSourceConference/mp3/mini1.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/mini2.mp3 Binary file OpenSourceConference/mp3/mini2.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/smart.mp3 Binary file OpenSourceConference/mp3/smart.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/mp3/thunder.mp3 Binary file OpenSourceConference/mp3/thunder.mp3 has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/obj/flash/relog.swf Binary file OpenSourceConference/obj/flash/relog.swf has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/obj/svg/sun.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/obj/svg/sun.svg Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/.DS_Store Binary file OpenSourceConference/pix/.DS_Store has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/NormalVNC0.png Binary file OpenSourceConference/pix/NormalVNC0.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/NormalVNC2.png Binary file OpenSourceConference/pix/NormalVNC2.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/NormalVNC3.png Binary file OpenSourceConference/pix/NormalVNC3.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/NormalVnc1.png Binary file OpenSourceConference/pix/NormalVnc1.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/TimeOut1.png Binary file OpenSourceConference/pix/TimeOut1.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/TimeOut2.png Binary file OpenSourceConference/pix/TimeOut2.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/TreeVNC.png Binary file OpenSourceConference/pix/TreeVNC.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/TreeVNC0.png Binary file OpenSourceConference/pix/TreeVNC0.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/TreeVNC1.png Binary file OpenSourceConference/pix/TreeVNC1.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/TreeVNC3.png Binary file OpenSourceConference/pix/TreeVNC3.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/VNC_Sequence_.png Binary file OpenSourceConference/pix/VNC_Sequence_.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/pix/VNC_Sequence_.png.bak Binary file OpenSourceConference/pix/VNC_Sequence_.png.bak has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/audio_link.png Binary file OpenSourceConference/ui/advanced_gfx/audio_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/audio_on.png Binary file OpenSourceConference/ui/advanced_gfx/audio_on.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/audio_over.png Binary file OpenSourceConference/ui/advanced_gfx/audio_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/auto_link.png Binary file OpenSourceConference/ui/advanced_gfx/auto_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/auto_on.png Binary file OpenSourceConference/ui/advanced_gfx/auto_on.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/auto_over.png Binary file OpenSourceConference/ui/advanced_gfx/auto_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/backgrnd.png Binary file OpenSourceConference/ui/advanced_gfx/backgrnd.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/delay_link.png Binary file OpenSourceConference/ui/advanced_gfx/delay_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/exit_link.png Binary file OpenSourceConference/ui/advanced_gfx/exit_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/exit_over.png Binary file OpenSourceConference/ui/advanced_gfx/exit_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/fade_link.png Binary file OpenSourceConference/ui/advanced_gfx/fade_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/fade_on.png Binary file OpenSourceConference/ui/advanced_gfx/fade_on.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/fade_over.png Binary file OpenSourceConference/ui/advanced_gfx/fade_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/footer.jpg Binary file OpenSourceConference/ui/advanced_gfx/footer.jpg has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/framing.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/framing.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,22 @@ +/* The following styles size, place, and layer the slide components. + Edit these if you want to change the overall slide layout. + The commented lines can be uncommented (and modified, if necessary) + to help you with the rearrangement process. */ + +/* target = 1024x768 */ + +div#header, div#footer, .slide {width: 100%; top: 0; left: 0;} +div#header {top: 0; height: 3em; z-index: 1;} +div#footer {top: auto; bottom: 0; height: 0.5em; z-index: 5;} +.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;} +div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;} +div#controls form {text-align: right; width: 100%; margin: 0;} +#currentSlide {position: absolute; width: 12%; left: 44%; bottom: 1em; z-index: 10;} +html>body #currentSlide {position: fixed;} + +/* +div#header {background: #FCC;} +div#footer {background: #CCF;} +div#controls {background: #BBD;} +div#currentSlide {background: #FFC;} +*/ diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/header.png Binary file OpenSourceConference/ui/advanced_gfx/header.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/last_link.png Binary file OpenSourceConference/ui/advanced_gfx/last_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/last_over.png Binary file OpenSourceConference/ui/advanced_gfx/last_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/list_link.png Binary file OpenSourceConference/ui/advanced_gfx/list_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/loop_link.png Binary file OpenSourceConference/ui/advanced_gfx/loop_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/loop_on.png Binary file OpenSourceConference/ui/advanced_gfx/loop_on.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/loop_over.png Binary file OpenSourceConference/ui/advanced_gfx/loop_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/next_link.png Binary file OpenSourceConference/ui/advanced_gfx/next_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/next_over.png Binary file OpenSourceConference/ui/advanced_gfx/next_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/notes_link.png Binary file OpenSourceConference/ui/advanced_gfx/notes_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/notes_over.png Binary file OpenSourceConference/ui/advanced_gfx/notes_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/opera.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/opera.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,7 @@ +/* DO NOT CHANGE THESE unless you really want to break Opera Show */ +.slide { + visibility: visible !important; + position: static !important; + page-break-before: always; +} +#slide0 {page-break-before: avoid;} diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/outline.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/outline.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,14 @@ +/* don't change this unless you want the layout stuff to show up in the outline view! */ + +.hide, .layout div, #footer *, #controlForm * {display: none;} +#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;} +#sheet {float: right; padding: 0.5em;} +html>body #sheet {position: fixed; top: 0; right: 0;} + + +/* making the outline look pretty-ish */ + +#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;} +#slide0 h1 {padding-top: 1.5em;} +.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;} +#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;} diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/pause_link.png Binary file OpenSourceConference/ui/advanced_gfx/pause_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/pause_on.png Binary file OpenSourceConference/ui/advanced_gfx/pause_on.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/pause_over.png Binary file OpenSourceConference/ui/advanced_gfx/pause_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/pretty.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/pretty.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,142 @@ +/* Following are the presentation styles -- edit away! */ + +body {background: #FFF url(backgrnd.png) fixed; color: #333; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 2.25em;} +a:link, a:visited {text-decoration: none; color: #C93;} + +h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} +h1 {text-shadow: 0.1em 0.1em 0.1em #333; background-color: transparent;} + +ul, pre {margin: 0; line-height: 1em;} +html, body {margin: 0; padding: 0;} + +blockquote, q {font-style: italic;} +blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} +blockquote p {margin: 0;} +blockquote i {font-style: normal;} +blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} +blockquote b i {font-style: italic;} + +img {border: 0;} +kbd {font-weight: bold; font-size: 1em;} +sup {font-size: smaller; line-height: 1px;} + +.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} +.slide code.bad, code del {color: red;} +.slide code.old {color: silver;} +.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} +.slide pre code {display: block;} +.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} +.slide li {margin-top: 0.75em; margin-right: 0;} +.slide ul ul {line-height: 1;} +.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} +.slide img.leader {display: block; margin: 0 auto;} + +div#header, div#footer {background: #fff; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;} +div#header {background: transparent url(header.png) bottom; line-height: 1px;} +div#footer {background: #999 url(footer.jpg) top; font-size: 0.5em; font-weight: bold; padding: 1em 0;} +#footer h1, #footer h2 {border: none; display: block; padding: 0; position:absolute; bottom:0.5em;} +#footer h1 {left:1em;} +#footer h2 {right:1em; font-style: italic;} + +div.long {font-size: 0.75em;} +.slide h1 {position: absolute; top: 0em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;} +.slide h3 {font-size: 130%;} +h1 abbr {font-variant: small-caps;} + +div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;} +html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;} +#controls #sheet {display: none;} +#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;} +#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;} +#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;} +#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;} +#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;} +#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;} + +#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;} +#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;} +#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;} +#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;} +#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;} +#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;} +#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;} +#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;} + +#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;} +#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;} +#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;} +#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;} +#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;} +#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;} + +#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;} +#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;} +#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;} +#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;} +#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;} +#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;} +#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;} + +#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;} + +#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;} + +#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;} + +#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;} +#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;} + +#slide0 {padding-top: 3.5em; font-size: 90%;} +#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;} +#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;} +#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} +#slide0 h4 {margin-top: 0; font-size: 1em;} + +ul.urls {list-style: none; display: inline; margin: 0;} +.urls li {display: inline; margin: 0;} +.note {display: none;} +.external {border-bottom: 1px dotted gray;} +html>body .external {border-bottom: none;} +.external:after {content: " \274F"; font-size: smaller; color: #999;} + +.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;} +img.incremental, canvas.incremental {visibility: hidden;} +.slide .current {color: #B02;} + +/* diagnostics +li:after {content: " [" attr(class) "]"; color: #F88;} +*/ + +table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; } +table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; } +table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; } +table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; } +table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; } +table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; } +table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; } +table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; } + +#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;} +#soundmanager-debug code {font-size: 11px;} \ No newline at end of file diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/prev_link.png Binary file OpenSourceConference/ui/advanced_gfx/prev_link.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/prev_over.png Binary file OpenSourceConference/ui/advanced_gfx/prev_over.png has changed diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/print.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/print.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,3 @@ +/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} +img {page-break-inside: avoid; page-break-after: avoid;} +/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/s5-core.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/s5-core.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,8 @@ +/* Do not edit or override these styles! The system will likely break if you do. */ + +div#header, div#footer, div#controls, .slide {position: absolute;} +html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;} +.handout, .notes, .hide {display: none;} +.layout {display: block;} +.slide, .hideme, .incremental {visibility: hidden;} +#slide0 {visibility: visible;} diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/slides.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/slides.css Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,3 @@ +@import url(s5-core.css); /* required to make the slide show run at all */ +@import url(framing.css); /* sets basic placement and size of slide components */ +@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file diff -r 000000000000 -r 7451f481250b OpenSourceConference/ui/advanced_gfx/slides.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OpenSourceConference/ui/advanced_gfx/slides.js Wed Sep 07 21:43:27 2011 +0900 @@ -0,0 +1,2694 @@ +// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger +// Please see http://s5.netzgesta.de/ for more information +// based on S5 v1.2a1 slides.js -- released into the Public Domain +// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information +// about all the wonderful and talented contributors to this code! +// audio extension: soundmanager2 is NOT Public Domain +// Please see http://www.schillmania.com/projects/soundmanager2/ for information + +var undef; +var slideCSS = ''; +var snum = 0; +var smax = 1; +var incpos = 0; +var number = undef; +var firstTime = 1; +var s5mode = true; +var helpmode = false; +var defaultView = 'slideshow'; //outline +var controlVis = 'visible'; + +// scalable images extension +var empx = 0; +var images = new Array(); +var canvas = new Array(); +var medias = new Array(); +var piecharts = new Array(); +var barcharts = new Array(); +var linecharts = new Array(); +// scalable images extension + +// transition extension +var tranSitions = false; +var fadeModus = false; +var fadeDuration = 500; +var incrDuration = 250; +var opac = 1; +var cid = ''; +var nid = ''; +var tid = ''; +var jl = ''; +// transition extension + +// autoplay extension +var autoMatic = false; +var playLoop = false; +var playPause = false; +var autoRun = false; +var playDelay = 5000; +var remainDer = 0; +var incrDelay = 0; +// autoplay extension + +// audio extension +var sound = new Array(); +var audioSupport = false; +var audioVolume = 100; +var audioError = false; +var swfUnloaded = true; +var bgSoundItem = 9999; +var curSoundID = -1; +// audio extension + +// panel extension +var imgWidth = 32; +var imgHeight = 32; +// panel extension + +// canvas chart extension +var canvasSupport = false; +var ChartData = new Array(); +var colorSlice = new Array(); +var font = document.createElement("img"); +font.setAttribute("src", "ui/graphic_support/numeric.png"); +signs = { + '0': {sx: 0, sy: 0, sw: 48, sh: 64}, + '1': {sx: 48, sy: 0, sw: 48, sh: 64}, + '2': {sx: 96, sy: 0, sw: 48, sh: 64}, + '3': {sx: 144, sy: 0, sw: 48, sh: 64}, + '4': {sx: 192, sy: 0, sw: 48, sh: 64}, + '5': {sx: 240, sy: 0, sw: 48, sh: 64}, + '6': {sx: 288, sy: 0, sw: 48, sh: 64}, + '7': {sx: 336, sy: 0, sw: 48, sh: 64}, + '8': {sx: 384, sy: 0, sw: 48, sh: 64}, + '9': {sx: 432, sy: 0, sw: 48, sh: 64}, + '%': {sx: 480, sy: 0, sw: 48, sh: 64}, + '.': {sx: 528, sy: 0, sw: 24, sh: 64} +}; +var colorNames= new Array(); +colorNames["black"]="#000000"; colorNames["maroon"]="#800000"; colorNames["green"]="#008000"; colorNames["olive"]="#808000"; colorNames["navy"]="#000080"; colorNames["purple"]="#800080"; colorNames["teal"]="#008080"; colorNames["gray"]="#808080"; colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000"; colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00"; colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF"; colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF"; colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7"; colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF"; colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2"; colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887"; colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00"; colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50"; colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC"; colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B"; colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B"; colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400"; colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B"; colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00"; colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000"; colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F"; colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F"; colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3"; colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF"; colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF"; colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0"; colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC"; colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700"; colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F"; colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4"; colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082"; colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C"; colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5"; colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD"; colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080"; colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2"; colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3"; colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A"; colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA"; colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE"; colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32"; colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA"; colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3"; colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371"; colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A"; colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585"; colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA"; colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5"; colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6"; colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500"; colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6"; colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98"; colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093"; colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9"; colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB"; colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6"; colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1"; colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072"; colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57"; colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D"; colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD"; colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA"; colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4"; colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8"; colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0"; colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3"; colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32"; +var canvas_bgcolor = ""; +var canvas_width = 200; +var canvas_height = 200; +var canvas_noshade = 0; +var canvas_nofill = 0; +var canvas_noshadow = 0; +var canvas_htmltext = 0; +var canvas_imgtext = 0; +var canvas_notext = 0; +// canvas chart extension + +var s5NotesWindow; +var s5NotesWindowLoaded = false; +var previousSlide = 0; +var presentationStart = new Date(); +var slideStart = new Date(); + +var countdown = { + timer: 0, + state: 'pause', + start: new Date(), + end: 0, + remaining: 0 +}; + +var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0; +if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0; +var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0; +var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0; +var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0; + +function hasClass(object, className) { + if (!object.className) return false; + return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1); +} + +function hasValue(object, value) { + if (!object) return false; + return (object.search('(^|\\s)' + value + '(\\s|$)') != -1); +} + +function removeClass(object,className) { + if (!object || !hasClass(object,className)) return; + object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2); +} + +function addClass(object,className) { + if (!object || hasClass(object, className)) return; + if (object.className) { + object.className += ' '+className; + } else { + object.className = className; + } +} + +function changeClass(object,className) { + if (!object) return; + object.firstChild.className = className; +} + +function GetElementsWithClassName(elementName,className) { + var allElements = document.getElementsByTagName(elementName); + var elemColl = new Array(); + for (var i = 0; i< allElements.length; i++) { + if (hasClass(allElements[i], className)) { + elemColl[elemColl.length] = allElements[i]; + } + } + return elemColl; +} + +function isParentOrSelf(element, id) { + if (element == null || element.nodeName=='BODY') return false; + else if (element.id == id) return true; + else return isParentOrSelf(element.parentNode, id); +} + +function nodeValue(node) { + var result = ""; + if (node.nodeType == 1) { + var children = node.childNodes; + for (var i = 0; i < children.length; ++i) { + result += nodeValue(children[i]); + } + } + else if (node.nodeType == 3) { + result = node.nodeValue; + } + return(result); +} + +function slideLabel() { + var slideColl = GetElementsWithClassName('*','slide'); + var list = document.getElementById('jumplist'); + smax = slideColl.length; + for (var n = 0; n < smax; n++) { + var obj = slideColl[n]; + var did = 'slide' + n.toString(); + obj.setAttribute('id',did); + var otext = ''; + var menu = obj.firstChild; + if (!menu) continue; // to cope with empty slides + while (menu && menu.nodeType == 3) { + menu = menu.nextSibling; + } + if (!menu) continue; // to cope with slides with only text nodes + var menunodes = menu.childNodes; + for (var o = 0; o < menunodes.length; o++) { + otext += nodeValue(menunodes[o]); + } + list.options[list.length] = new Option(n + ' : ' + otext, n); + } +} + +function currentSlide() { + var cs, at, fd, ss; + if (document.getElementById) { + cs = document.getElementById('currentSlide'); + } else { + cs = document.currentSlide; + } + fd = fadeModus?"F":"–"; + ss = audioSupport?"S":"–"; + at = (autoMatic?(playPause?"||":(playLoop?">0":">|")):"––"); + cs.innerHTML = '