空間ファイル共有に関して

作った「空間ファイル共有」に関してコンセプトや技術面の説明とかです。





コンセプト

重力デスクトップと同じく
「VRでもARでもないけれど、現実を感じるもの」
なんだろ?現実付加?リアリティ?

作った理由

今のファイル共有って(その場で共有するのには)楽しくないし直感的じゃないから。
会議のときとか、友達とわいわいやるのに、もっと向いている方法があるはず。


ネットワーク上のフォルダに入れて、ファイルへのパスを教えて・・・って作業がめんどくさいというか直感的じゃないと思う。
物を渡すみたいに「ぽいっ」って渡せるってのが自然な感覚だとおもう。


携帯とかのデバイスでこういう交換の仕方ができたらいいなぁ。

デモの際の構成

  • PC2台
  • マルチユーザーサーバー
    • PC2台のうちの片方がサーバー兼用
  • ファイルサーバー
  • LAN環境

めんどくさい所

お互いのPC向きが違うので、座標など色々なものを補正しないとならないとか

実装

ファイルの共有はドロップされた時点で、ファイルサーバーにアップされます。
その後、ファイルの情報(種類、幅、高さ、ファイルパス)などを相互通知しています。
ファイル自体はそのタイミングであらかじめ読み込んでます。


ファイルの情報をあらかじめ通知するのは、ファイルを読み込み終わる前でもダミーの矩形を使って処理できるようにする為

体感速度をあげる

HTTPやコメット(これもHTTPですね)のように、送るたびに切断するわけでなく、
ストリームの様に接続を維持するタイプのものなので、通信は結構早いです。
とはいえ全ての処理をサーバーを経由すると、通信を挟むのでかくかくになってしまうし、操作している感覚と結構ラグが発生します。

  1. 自分がドラッグしているものはとりあえずローカルで先に処理→接続ユーザーに通知
  2. ドラッグ後に慣性で動く部分(投げたりとか)は、アニメーションをスムーズにするため完全にお互いのローカルで処理。
    1. ただし完全に初動作の条件を一致させないとおたがいばらばらの動きになってしまう
    2. さまざまな情報(速度、角度、座標、初速、角速度等)を初めに補正しておくことで、完全にお互いで同じ計算がおこなわれるようにする


まぁそれ以外もやってるんですが、こういう細かい部分で体感速度はだいぶ違います。
デモ様に実装したのでエラー処理とかいろいろ省いてますorz





※この記事はあとで加筆する予定です

空間ファイル共有を作ってみました


Toytools Share Box。
空間ファイル共有を作ってみました。
↓↓↓YouTubeはこちら↓↓↓


あ、しばらく仕事が忙しそうなので、家での趣味プログラミングのペース落ちます
次は年明けかなぁ
プロペ(http://prope.in/)もよろしくお願いします


BGM:
商店街ノスタルジカ/col
http://wacca.fm/m/11652/

追記

YouTubeのトップ(のおすすめの所)に「重力デスクトップ」が掲載される予定っていう連絡をYouTubeからもらいました。
やったー!

追記

ニコニコとYouTubeの動画のブックマーク数を表示するようにしました

重力デスクトップがテレビでとりあげられました

重力デスクトップが昨日(10/4)日テレの番組にとりあげられました

[id:toytools:20080908]


色々な関係上、放送前にブログでお知らせができませんでした。
音が変わってしまってたのが凄い残念・・・うーん・・・


ニコニコが再生+1万ちょっと
YouTubeが再生+1万ちょっと
くらいの増加です。再生数よりもコメントの多さに驚いたり。
1、2分くらい出ただけでも結構インパクト強いです。
さすがテレビ。


次回作のデモは、ほぼプログラムはできあがってきていて、今はデザイン埋め込んでます
次は「○○を越えちゃいます」!!
多分、重力デスクトップほどのインパクトはないけれど

かっこいいはじめてのチュウ


かっこいいはじめてのチュウ

サンプリングしてんのかなぁ。
かっこいい・・・

追記

naoさんからコメントでLUV and SOULってグループの歌の早回しってことを教えてもらいました
そのうちこのエントリーのニコニコの埋め込み削除するかも。
だまされた。

C#でThinkpad加速度センサーの値をとる


C#Thinkpad加速度センサーの値をとってみるよ!

//C# code
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;

namespace ThinkPadSensor
{
    class APS
    {
        [DllImport("sensor.dll")]
        public static extern void ShockproofGetAccelerometerData(ref AccData accData);

        [StructLayout(LayoutKind.Sequential)]
        public struct AccData
        {
            internal int status;
            internal short x;
            internal short y;
        }
    }
    

    class Program
    {
        const int CENTER_X = 508;
        const int CENTER_Y = 514;
        static void Main(string[] args)
        {
            APS.AccData data = new APS.AccData();
            while (true)
            {
                APS.ShockproofGetAccelerometerData(ref data);
                System.Console.WriteLine("[{0},{1},{2}]", data.x - CENTER_X, data.y - CENTER_Y, data.status);
                System.Threading.Thread.Sleep(100);
            }
        }
    }
}


ちなみにほぼ100%ここのコードです。
Thinkpad Accelerometer Data - Accessing from .NET - by Ben Suter

手元の環境用に値をXが508、Yが514を基準に丸めてますが必要に応じて調整してください。





あ、ちなみに重力デスクトップは
HDD加速度センサーではなく外部(というか有名な白いリモコンw)から取得してます -_-
HDD加速度センサーのほうが夢があるからHDD加速度センサーってことにしておこうかと思ったけどそろそろネタばれさせておきます


C#久しぶりにさわったw

Red5をやろうかと

PCにはいっていたFMS2をアンインストールしてFMS3をインストールしたら
FMS3が動かない。
しばらく粘ってみたけど原因がわからない。


FMS3の根元までは通信いってるんだけど、FMS3内部のバーチャルホストには通信が届いてない感じ



しかたないので、ちょっと気になってたRed5に乗り換えることにしました
Javaで書かれているだけにDB連携とか何かと開発の幅が広そうだし


Red5で困ったポイントとかあったら書いてきます
Red5はスムーズに通信できてます。


Red5デバッグ情報をコンソール出力ってどうやるんだ?