PDAでGoogle検索

Android 搭載ケータイでのGoogleモバイルサービス
http://www.youtube.com/watch?v=WJMMSCn2M64&eurl=http%3A%2F%2Fwww%2Egizmodo%2Ejp%2Fweb%2Fbrowser%2F&feature=player_embedded

Androidの売りは「指先で操作できる」とこにあると思う。指先で操作するためには、ある程度のボタンと画面の大きさが必要で、いままでの携帯電話の小さな画面だとちょっと扱いづらい。(日本独特の?)親指文化はそれはそれでいいので、このあたりは別ものとしてUIを扱う必要がある。

で、中古PDAでもInternet Explorerが付いているわけで、Google検索も当たり前のようにできる。が、何が使いづらいって、そりゃ、IEを立ち上げないとGoogle検索ができないのが面倒。

つまり、何か検索しようとすると

1.IEを立ちあげる。
2.お気に入りからGoogleを開く。
3.検索文字を入れて、検索!

ってな感じで3ステップが必要。だから、

1.Google検索アプリを立ち上げる。
2.検索文字を入れて、検索!

でもいいわけで、試しに実現したのがこれ。

09-06-01_10-23

09-06-01_10-31

09-06-01_10-126

09-06-01_10-261

ソースはこちら


namespace GoogleSearch
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private string SEARCH_NULL = "Google検索";

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        // 空白時の処理
        private void textBox1_GotFocus(object sender, EventArgs e)
        {
            if (textBox1.Text == SEARCH_NULL)
            {
                textBox1.Text = "";
                textBox1.ForeColor = Color.Black;
            }
        }

        private void textBox1_LostFocus(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                textBox1.Text = SEARCH_NULL;
                textBox1.ForeColor = Color.LightGray;
            }
        }

        private void picSearch_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != SEARCH_NULL &&
                 textBox1.Text != "")
            {
                System.Diagnostics.Process proc = new System.Diagnostics.Process();
                proc.StartInfo.FileName = "iexplore.exe";
                proc.StartInfo.Arguments = "http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=" + textBox1.Text;
                proc.Start();
            }
        }

        //ロード時
        private void Form1_Load(object sender, EventArgs e)
        {
            picGoogleLogo.Image = Properties.Resources.GoogleLogo;
            picSearch.Image = Properties.Resources.SearchIcon;
            picSearch.Focus();
            textBox1.Text = SEARCH_NULL;
        }
    }
}

特に何も難しいことはやっていなくて(やることすらできない)、Process クラスでIEを起動しているだけです。画像の貼り付けは、ボタンとかに付けられないのでリソースから明示的に。

問題点としては、

– 文字入力はスタライス入力が必須になってしまうので、別途大きなボタンが必要。
– テキストのコピー&ペーストは自前で作るらしい(iPhoneを笑っていられない)
– ブラウザが基本フルブラウザなので、横スクロールがあって読みづらい。Agentを書き換えて、携帯用のレスポンスを呼び出したほうがいいかも。

カテゴリー: PDA | PDAでGoogle検索 はコメントを受け付けていません

PDAで無線LANを扱う(仮)

アイデアノートとして。

ccf20090529_00000

中古でPDAを購入したときにクレードルは付いていない。ので、なんらかの形でPCと連携/通信する手段が必要。というか、クレードルに置かないと通信や同期ができないのは面倒だし、家や会社の両方にクレードルを置いて同期(?)をさせるのも、お金が必要だし(昔ThinkPadを使っていたときはクレードルを2台買ったが)。

# というよりも、中古PDAでも最新のwindows mobileでも動くようにするわけだから、このあたりは、通信手段としては無線LANかBluetoothが有用。

PDA同士のP2P通信は別に考えるとして、

■PDAがクライアント、PCがサーバーの時

– .NET Remote を使ってPCへ通信
– WEBサービスでも良いが、PC側にIISが必要(SQL Serverでも良いけど)になるので大袈裟。しかも業務アプリっぽい動きしかできないのでパス。

WEBサービスを利用すれば、Amazon API を叩くこともできるのですが、PDAからモデム通信をしないといけないので、ちょっと躊躇。お金が掛かるからね。

Amazon のサービスを呼び出すならば、

– 無線LANがあれば、PC経由でAmazon APIを叩いて、PDAで表示。
– 無線LANがなければ(戸外にいれば)、既に取得済みのデータベース(SQL Server Compact)を使って検索して表示。

な具合が課金的にはよろしい。google map とか他の検索機能も同じ。というか、その場で検索ってのはモデム通信をしないとできないので、課金的に得策とは言えない。別の使い方をしたほうがよい。

その点、PDAからPCをリモートで操作、ってのはお手軽にできる。
PCを使っているんだからキーボード/マウスは手元にあるはず(椅子に座っているはず)なのだが、

– 単に映画を見ているとき
– 単にゲームをしているとき
– ブラウザで閲覧

なんてときは、手元にキーボードは必要ないし、マウスぐらいでいい。実際、無線対応のマウスを使うとこの点は便利。

だが、もうちょっと細かい操作をしようと思うと、マウスだけでは足りないので、PDAで作った「リモコン」がいい(これは携帯でもok)。スタライスで文字をぽちぽち打つのはやめ!鬱陶しい!ので、ボタンは9個(iPhoneもそんな感じ)。切り替えて表示すればok。何をPCで動かすかは未定ではあるが。

今度は逆

■PDAがサーバー、PCがクライアントの時

PDAがサーバーの場合は、

– .NET リモート
– WEBサービスのサーバ
– TCP/IPのサーバ

と色々できる。無線LANを使っている間は電気を大量に食うのであるが、利用用途としては、

– PCのサブ画面

として使うことになるので、電源をコンセントに刺した状態で使う。使い方は、動画をサブ画面で流すことも考えられるが、これだけだとつまらない。単にTVを付けるか、サブ用の液晶ディスプレイを買えばOKなので。

もうちょっと凝った一案として、

1.サブ画面に「葉書」で来たようにメールの着信を表示する
2.サブ画面をタッチすると、裏面にメールの本文がある。
3.サブ画面の「詳細へ」ボタンを押すと、PCに本文が開く(ここはおまけ)

ってことができる。普通のサブ画面用液晶の場合タッチパネルではないので、2ができない。1はwindows mobile の携帯でもok。リアルっぽい「葉書」が良い(これは画像を貼り付けるだけでよいので簡単)。PDAのメーラなんてのは、業務的には本文をちまちま読むのが主流だけど、どうせPCと組み合わせるのだから、もっと単機能的に使うのがいい。音を出すのも簡単。

と、ここまでは自作できそう。
windows ce にサービスの概念があるかどうか調べていたのだけど、よくわからない。が、windows ce の場合、アプリケーションをユーザーが落とすことになるので、当面は通常アプリとして起動、でもいいかな。

カテゴリー: PDA | PDAで無線LANを扱う(仮) はコメントを受け付けていません

PDA で SQL Server Compact 3.5 を使う

PDA自体にデータベースを乗せる簡単な検証をしてみました。

極小SQL Server Compactでデータベース・アプリをお手軽作成
http://www.atmarkit.co.jp/fdotnet/joyofprogram/20080701devssce/devssce_01.html

利用方法としては、

– データベースをあらかじめ作成しておいて SD メモリに置く。
– アプリケーションからPDA上のDB(SDFファイル)を参照する。
– 無線LANなどが使えるときは、適宜DBをアップデートする。

ってな感じを想定しています。
DBのアップデートに関しては、地図や電話帳みたいな固定データは丸ごとPCからコピーしてもOK。
PDAで編集したメモ書きなんかは、適宜PCでマージしてやって(PDAでマージでもOK)、DBに書き戻すという方法がよいでしょう。

ActiveSync に関しては保留。中古でPDAを手に入れると大抵クレードルがありません(スタライスも無いことが多い)。なので、PDAとPCとのデータのやり取りは、

– SDメモリ経由
– CFカード経由
– 無線LAN
– Bluetooth

に限られます。赤外線でもいいけど、昨今のノートPCには赤外線が乗っていない機種が多いのでパス。
勿論、PDA自体に無線LAN/Bluetoothが乗っていない場合もあるわけですが、それはそれで(今時の)使い勝手を考えて現在保留。

さて、本題ですが、PDAでSQL Server Compact 3.5 を使うときは、System.Data.SqlServerCe 名前空間を使います。この中に SqlClient と同等のクラスが含まれています。
参照設定に「System.Data.SqlServerCe.dll」を追加します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace DBAccess01
{
    public partial class Form1 : Form
    {

        private SqlCeConnection m_cn;
        private string m_ConnectString = "";
        
        public Form1()
        {
            InitializeComponent();
            //DBの位置
            System.Reflection.Module[] modules =
                System.Reflection.Assembly.GetExecutingAssembly().GetModules();
            string path = System.IO.Path.GetDirectoryName(modules[0].FullyQualifiedName);
            m_ConnectString = "Data Source=" +
                path + "\\AppDatabase1.sdf";
        }

        // 接続
        private void button1_Click(object sender, EventArgs e)
        {

            //MessageBox.Show(m_ConnectString);

            m_cn = new SqlCeConnection(m_ConnectString);
            try
            {
                m_cn.Open();
                MessageBox.Show("接続完了");
            }
            catch ( SqlCeException ex )
            {
                MessageBox.Show(ex.Message);
            }
        }
        // 切断
        private void button2_Click(object sender, EventArgs e)
        {
            if (m_cn != null)
            {
                m_cn.Close();
                MessageBox.Show("切断");
                m_cn = null;
            }
        }

        // 検索
        private void button3_Click(object sender, EventArgs e)
        {
            SqlCeConnection cn = new SqlCeConnection(m_ConnectString);
            SqlCeDataAdapter da = new SqlCeDataAdapter(
                "SELECT * FROM t_product", cn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            this.dataGrid1.DataSource = dt;
        }
    }
}

接続文字列は

Data Source=SDFファイル名

のように指定します。上のソースではアプリケーション(EXEファイル)と同じ場所にあるSDFファイルを指定しています。

あと、PDA には .NET Compact Framework 3.5 と Microsoft SQL Server Compact Edition v3.5 なるものが必要です。.NET Compact Framework 3.5 のインストールに関しては、http://www.moonmile.net/blog/?p=82 を参照して貰うことにして、SQL Server Compact の方は Visual Studio 2008 をインストールしたときには、

C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\

にあります。
# 2005 とか Express Edition の場合はよくわからないのですが、先の「極小SQL Server Compactでデータベース・アプリをお手軽作成」の記事を眺めると結構大変そうなので、これはまた別の機会に。

この中にあるCABをインストールします。これはPDAによってCABが決まっています。

– sqlce.ppc.wce4.armv4.CAB

をPDAにインストール。そしてリセット(リセットしないと駄目らしい)。

SDメモリにサンプルで作成したファイルを入れます。

– DBAccess01.exe: 実行ファイル
– AppDatabase1.sdf: DBのファイル
– System.Data.SqlServerCe.dll: CE用DLL

で、実行したときの結果がこちら↓

SDメモリから直接起動

09-05-28_11-20

DataGridView に表示しているところ。

09-05-28_11-201

メモリの使用率が気になるところですが、今は測定していないので無視。

ちょっと気になったのが、

– varchar, char は無く、nvarchar, nchar で置き換える必要あり。
– ストアドプロシージャは作れない。
– レプリケーション機能がある。
– 日付型がdatetimeしかない。date型やtime型がない。

など細かな違いがあります。個人的には nvarchar に変換するのが面倒なのと、ストアドが無いってところですかね。システム関数はどこまで対応しているのか分かりませんが。

カテゴリー: PDA | PDA で SQL Server Compact 3.5 を使う はコメントを受け付けていません

デジタルフォトミニアルバム(仮2)解析

デジタルフォトミニアルバム(仮)解析 の続き

SPTIによる制御法
http://azuco.smallnews.net/fao/doc/spti.html
DeviceIoControl-SCSI_PASS_THROUGH_DIRECT keeps giving Error 87
http://social.microsoft.com/Forums/en-US/Offtopic/thread/56529bff-ef02-4b67-8dae-bef7a7be0dfd
SCSI read disc structure C++ help
http://cboard.cprogramming.com/cplusplus-programming/113878-scsi-read-disc-structure-cplusplus-help.html
アーカイブ: USB ストレージ – ドライバおよびハードウェア開発者向けの FAQ
http://www.microsoft.com/japan/whdc/archive/usbfaq.mspx
Japan WDK Support Blog : アプリケーションからSCSIコマンドを発行する方法
http://blogs.msdn.com/jpwdkblog/archive/2009/04/15/scsi.aspx

DeviceIoControl と IOCTL_SCSI_PASS_THROUGH_DIRECT をキーワードにして探していくと↑なところに行きつきました。

最初は、SPTIによる制御法を参考にして、直接組んでいたのですが、やっぱり Windows Device Kit(WDK)が必要なようです。つーか、そこにサンプルがあります。

WDKをインストールして、

C:WinDDK6001.18002srcstoragetoolsspti

を見ると、spti.c なソースに IOCTL_SCSI_PASS_THROUGH や IOCTL_SCSI_PASS_THROUGH_DIRECT を指定したサンプルがあります。ちなみに _DIRECT あり/なしの違いを簡単に言うと、読み書きするときのバッファの取り方が違います。_DIRECT なしの場合は、いったんドライバー内部のデータに読み込んだ後にユーザーの指定バッファに転送、_DIRECT ありの場合は、ドライバー内部を経由せずに直接ユーザー指定のバッファに転送します。ってのが、spti.htm に書いてあります。

WDKの入手先は、Microsoft Connect Web サイト か MSDN サブスクリプションとなっています。が、私の見た限り MSDN サブスクリプションには WDK が無い(?) ので、Microsoft Connect Web サイトのほうでダウンロードしました。

ci090527105535

Alcohol 52% でマウントしたCDを以下のソースで読み取ることができたみたいです(データの解析をしていないので、本当に読み込んだかどうかは後日)。

    printf("            *****       READ DATA BUFFER operation         *****n");
 if ( dataBuffer == NULL ) {
      dataBuffer = AllocateAlignedBuffer(sectorSize,alignmentMask, &pUnAlignedBuffer);
 }
    ZeroMemory(&sptdwb, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER));
    ZeroMemory(dataBuffer,sectorSize);</pre>
    sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
    sptdwb.sptd.PathId = 0;
    sptdwb.sptd.TargetId = 1;
    sptdwb.sptd.Lun = 0;
    sptdwb.sptd.CdbLength = CDB12GENERIC_LENGTH;
    sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_IN;
    sptdwb.sptd.SenseInfoLength = SPT_SENSE_LENGTH;
    sptdwb.sptd.DataTransferLength = 2352; // SPT_SENSE_LENGTH;
    sptdwb.sptd.TimeOutValue = 2;
    sptdwb.sptd.DataBuffer = dataBuffer;
    sptdwb.sptd.SenseInfoOffset =
       offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,ucSenseBuf);
//    sptdwb.sptd.Cdb[0] = SCSIOP_READ_DATA_BUFF;
//    sptdwb.sptd.Cdb[1] = 2;                         // Data mode
//    sptdwb.sptd.Cdb[7] = (UCHAR)(sectorSize >> 8);  // Parameter List length
//    sptdwb.sptd.Cdb[8] = 0;

    sptdwb.sptd.Cdb[0] = SCSIOP_READ_CD;
    sptdwb.sptd.Cdb[2] = 0;                        
    sptdwb.sptd.Cdb[3] = 0;                        
    sptdwb.sptd.Cdb[4] = 0;                        
    sptdwb.sptd.Cdb[5] = 0x10;    // どのセクタを読み込むか
    sptdwb.sptd.Cdb[8] = 1;   // 1セクタ分読み込む
    sptdwb.sptd.Cdb[9] = 0xF8;
    length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);

    status = DeviceIoControl(fileHandle,
                             IOCTL_SCSI_PASS_THROUGH_DIRECT,
                             &sptdwb,
                             length,
                             &sptdwb,
                             length,
                             &returned,
                             FALSE);

肝心のデジタルフォトミニアルバムのほうは読み込めない。何故に?というか、CDB(Command Discripter Block)をきちんと設定していないので、まぁそりゃそうなんですが。このあたりのコマンド、どういうのを送るのかと言うのが良くわからん。「SPTIによる制御法」を読むとコマンド仕様については、以下を参照のこと、
Information Specification for ATAPI DVD Devices
ftp://ftp.seagate.com/sff/INF-8090.PDF

となるので、これを詳細に読むのかな?

カテゴリー: 開発 | デジタルフォトミニアルバム(仮2)解析 はコメントを受け付けていません

“ミニマム インターフェース展” YCAM

site hirac : サイトハイラック
http://hirac.info/site/
ci090526100505

minimum interface
http://minimum.ycam.jp/

ci090526100513

直接コンピュータ(キーボードなど)に触れることなく、コンピュータの機能を使って現実と仮想を組み合わせる試みです。有名なところでは、iPhone の2本指による拡大/縮小/回転などがあるのでしょうが、私としてはこっちの紙の上に穴を空けたパンフレット(?)を使って、机に案内を表示する、っていう発想のほうが面白い。

仕組み的にはバーチャルの画像と立体を組み合わせる、ポイントを認識する仕組みと同じでしょうから、

1.紙を WEB カメラで移す。
2.穴の位置を認識して、傾きを測定する。
3.穴がふさがれた状態を認識して、対応する案内/ガイドを持ってくる。
4.穴の位置に会うように画像をスライドで表示する。

という具合(だと思う)。

私にとって一番「面白い/楽しい」と思うのは、物理的な「紙」を使っている、ところです。wilcoom 03 のタッチパネルや PDA を使っていて不満に思うところは、それに物質感がないところです。常にすべすべ。昔、科学技術館(だったか)、液晶にざらざらする触感を与える展示がありました。確か、数年前にアルプス電子(だったかな)が液晶を波打たせる技術を開発/販売していたと思います。これを使うと、若干ですが指先で感じられるほどボタンが盛り上がったり、ざらざらした感触が得られます。DS のようにタッチペンで主に操作するときには別に触感はいらないのですが、携帯電話の場合「数字」を打つときの触感が結構重要です。物理的なボタンを使ったときは、くぼみや、5番の中点(中心を知らせる仕組み)を利用して、ボタンを見なくて押せますが、液晶パネルの場合にはこれができません。なので、液晶だけのほうが見た目は美しいかもしれませんが、いまいち使いづらいのです。極論を言えば「機能美を優先しすぎた、アールデコ的な反動」を感じるのです。

と私的な意見はこれくらいにして…

さて、これは紙に印刷して来場者に配る、のですからパンフレットとして使えます。
YCAM で使われたパンフレットは非常にシンプルなものですが、カラー印刷もできます。

穴は穴じゃなくても良い訳でなんらかの認識しやすいカラーでもいいわけです。

認識の方式としては、

– カラー階調による認識
– 形状認識

が考えられますが、形状認識のほうは画像にエンボスを掛けて認識させるんでしょうが、誤認識が多そう。色調と組み合わせて、触感的には形状(丸とか四角とか星型とか)をあわせると人間にわかりやすいかな。

ブロックにマーキングを付けて認識させる方法は確立されているので、あとは

– どんなブロックを使うのか?
– どんな紙/マーキングを使うのか?
– 映像との組み合わせは、どのくらいが適切か?

の感覚的な組み合わせでしょうか。

カテゴリー: 雑談 | “ミニマム インターフェース展” YCAM はコメントを受け付けていません

OpenLDAP

シングルサインオンを実現する方法としては、

a) 各アプリ/OSSの認証用のDBを直接読みに行く。
b) 何らかの方法で Active Directory を使う。
c) 何らかの方法で LDAP を使う。

という方法が考えられると思います。
# 他にもあるんでしょうが、

私自身 LDAP をよく知らないので、a) の方法を考えていたのですが、よく Active Directory と LDAP が比較されているので、ちょっと調べてみました。
技術評論社のページにいいものがあります。
そろそろLDAPにしてみないか? 中満英生
http://gihyo.jp/admin/serial/01/ldap

2007年6月4日から月1ぐらいのペースで連載されています。ちょうど、日本LDAPユーザ会 http://www.ldap.jp/ が出来た頃みたいです。

この OpenLDAP http://openldap.org/ は Linux 上で動きます。実は Windows 上も2008年4月ぐらいまでは公開されたみたいなのですが、現在は公開が中止されています。

2007年10月4日
OpenLDAP for Win32 – その1.
http://lightmaterial.blogspot.com/2007/10/openldap-for-win32-1.html

なので、OpenLDAP を試すためには Linux を立てなくちゃならない、え~、面倒臭い。訳ですが、まあそのあたりの(私の愚痴)は無視して話を進めます。

# ちなみに、当然のことながら商用のLDAPもあります。商用のLDAPは試したことがないので、どれだけ使いやすいか/値段がどうなのか、なんてのは分かりませんが、OSS を使うのに商用のLDAPを使うのは本末転倒な気がするので、OpenLDAPを使うことを前提にして考えています。

このLDAP(Lightweight Directory Access Protocol)、何をするのかを簡単に言えば、ユーザ認証をします。ユーザ認証だけなれば、RADIUSサーバなんてのや、普通のWindows認証を使ってもいいのですが、LDAPの場合なんらかの付加情報を持つことができます。付加情報ってのは、

– そのユーザはどんなグループに属しているか?
– そのユーザはどんな権限を持っているか?
– そのユーザの名前は?メールアドレスは?

ってな感じですね。内部的にはDBを持っていて検索しているだけなので、何でも入れられると言えば入れられる。似たものとして Active Directory がありますが、これも似たような情報を持てます。仕組みは違うけど、まぁチープに使っている分には似たようなものです。

ここで使っている WordPress もそうですが、ユーザ認証は内部のDBに持っています。管理ユーザや投稿ユーザという「役割/role」が付けられますが、それを設定するのは wordpress の admin 画面で設定します。また、ユーザを追加したり削除したり、パスワードを変更したりする機能も admin 画面で行います。

投稿するユーザを特定した後、roleを比較して何ができるのか/何ができないのかを判断するのはアプリに独自に必要でしょうが、ユーザを特定するところ(認証するところ)は、各アプリほとんど〃ことをやっています。

– ユーザ名とパスワードを入れてログイン
– 内部のDBで比較
– ユーザを特定する。

OSS に限りませんが、ユーザーを特定する必要のあるアプリケーションはほぼ似たようなことを独自にやっています。まぁ、単体で動かすのですから当然です。
ですが、このようなユーザー認証が必要なアプリを複数集めて「連携」させようとした時に、ここがネックになります。これを解決するのが「シングルサインオン」なわけですが、では具体的にどうやって「連携」させるのか?が問題です。
アプリは独自にユーザー認証のDBを使っているので、無理矢理連携させるためには冒頭に書いた、

a) 各アプリ/OSSの認証用のDBを直接読みに行く。

ってことが必須になりますなぁ。

ところが、うまいことLDAPに対応していれば連携が取りやすくなるはずです。

WordPress de LDAP
http://www.neo.ie.u-ryukyu.ac.jp/~joma/sblog/index.php?m=11&y=07&entry=entry071120-175349

ってのもあるそうです。となると、他のOSSアプリでもLDAP対応のものがありそうです。

というわけで、複数のOSS + LDAP → グループウェア化? という図式が浮かんでくるわけです。
# もっと検討が必要ですが、シングルサイノン関係は LDAP を使えばいけそうだ、という見通しをば。

以下は読んで(私が)参考になったもの。

第1回 まずは使ってみよう
http://gihyo.jp/admin/serial/01/ldap/0001
第7回 ApacheのBasic認証をLDAPで
http://gihyo.jp/admin/serial/01/ldap/0007
第8回 LDAPデータ管理
http://gihyo.jp/admin/serial/01/ldap/0008?page=3

カテゴリー: 開発 | OpenLDAP はコメントを受け付けていません

オープンソースのグループウェアを探す

先のエントリのスクリプトを動かした結果が↓です。

MOONGIFT: » 日本向きなWebベースのグループウェア「Aipo4」:オープンソースを毎日紹介
http://www.moongift.jp/2008/03/aipo4/
一番使えるグループウェアはこれだ!: フリーかつオープンソースのグループウェア【Web2.0 ソースコード完全提供】
http://sysphonic.blogspot.com/2007/07/blog-post.html
『アイポ4』 ユーザーコミュニティ – 日本発オープンソースグループウェア
http://user.aipostyle.com/
ゼロ円でできるグループウェア(1/4)
http://www.atmarkit.co.jp/flinux/special/aipo4/aipo4a.html
インストールマニアックス2009 | Ryuzee.com
http://www.ryuzee.com/installmaniax2009/
Customizable Post Listings | coffee2code.com
http://coffee2code.com/wp-plugins/customizable-post-listings/
web os とは – Google 検索
http://www.google.co.jp/search?hl=ja&q=web+os+%E3%81%A8%E3%81%AF&lr=lang_ja
WebOSはビジネスになる?――XMLコンソーシアムが研究成果を発表:ITpro
http://itpro.nikkeibp.co.jp/article/NEWS/20070523/272071/
SSMTP でメール送信しよう! – WebOS Goodies
http://webos-goodies.jp/archives/50645131.html
シスフォニック株式会社 Sysphonic Co., Ltd.
http://sysphonic.com/ja/index.html

グループウェア調査をしているのですが、サイボウズを始めとして本当に必要なグループウェアの機能とは何か?を考えています。考えた上で、何かを選定するか/あるいは自作するか/組み合わせるか、というスタイルを取ります。

それで思い至ったのは、

– 無償となると Apache + PHP + MySQL の組み合わせが良い。
– 手軽さは、Windows XP/Vista に載せるのが良い。
– オールインワンタイプではなくて、OSS の組み合わせでも良い。
– 組み合わせの場合は、シングルサインオンが必須。
– 組み合わせの場合は、画面の統一感が必須。

なところです。

(私の場合)グループウェアの導入で躊躇するところは、

– お試し/テスト運用でも価格が高い。
– 環境構築/調査に手間取るのは嫌。
– どこまで使うか分からない機能が満載、でもあまり意味がない。
– 自分に必要な機能が、そのグループウェアに入っていない。
– 現在使っているモノ(ブログや掲示板など)との連携はどうするのか?
– 利用するときには、技術先行が好きな人ばかりではない。現状の業務スタイル/カラーに合わせたい。

の点があり、いまひとつグループウェアの利用という点に不満があります。

オールインワンタイプのグループウェアが多い(というかほぼ全てがそれ)のは、連携に手間取るからでしょうし、収支を考えたり、(重要ではありますが)開発者のスタイルに固執しすぎたりするのではないか、と考えています。となれば、この逆を考えればいいわけで。

というわけで先の「思い至った」ところに至ります。

カテゴリー: 雑談 | 1件のコメント

IEで開いているURLとタイトルの一覧を取得する

その名の通り、IEで開いているURLの一覧を取得するための WSH のスクリプトです。

'IEで開いているURLとタイトルの一覧を取得する。
set fso = CreateObject("Scripting.FileSystemObject")
txt = ""
for each br in CreateObject("Shell.Application").Windows
  pname = fso.GetFileName( br.FullName )
  if  LCase( pname ) = "iexplore.exe" then
   if br.LocationURL <> "about:blank" then
    txt = txt & br.Document.Title & vbcrlf
    txt = txt & br.LocationURL & vbcrlf
   end if
  end if
next
wscript.echo txt
ClipBoardSet txt

'クリップボードアクセス
'http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/dec04/hey1215.mspx
sub ClipBoardSet( s )
 Set objIE = CreateObject("InternetExplorer.Application")
 objIE.Navigate("about:blank")
 objIE.document.parentwindow.clipboardData.SetData "text", s
 objIE.Quit
 set objIE = Nothing
end sub

既にあるような/ないようなもので簡単なのですが、一応晒しておきます。
要は、調べ物をしているとタブを大量に開くんですよね。で、いらないものをぽちぽちと消して行って大体参照できたものを残す。その後にブログに残すか、メモ帳に残すか、お気に入りに分類するか、にするわけですが。このときにタイトル&amp;URLをワンセットで残すのが面倒臭い。

– お気に入りの場合は、タイトル&amp;URLでワンセットになるがメモが掛けない。分類も面倒。
– ブログに晒しておくときは、整形に手間が掛る。特にタイトルがコピーできない。
– メモ帳に残しておくときも同じで、整形に手間が掛る。

# 探し物/調べ物をしているわけですから、なんらかのメモ書きが必須なんですよ。

実行時にクリップボードのアクセスでダイアログが出ますが気にしません。
後、クリップボードのアクセスは Microsoft TechNet に載っているので、そこそこ有名な方法みたいです。

カテゴリー: 開発 | 1件のコメント

More wiki in a jar

More wiki in a jar

jarファイル1個で wiki が動きます。
tomcat も apache も iis もいりません。

SourceFoge の方
http://morewikiinajar.sourceforge.net/
http://sourceforge.net/projects/wiki-in-a-jar

だけだと、あまりにチープなので moongift の紹介記事
http://www.moongift.jp/2008/10/more_wiki_in_a_jar

そもそも、このブログのタイトルは最初はBTS(bag tracking system)を作る予定だったのですが、この発想元には「iis上では動かず、単体でtracのようなBTSを動かしたい」というのがあります。そう、USBメモリ一本で動く、という具合です。これの場合、java が必要ですが(asp.netでも.net frameworkが必要なんだけど)apacheのようなhttpサーバが要らないといういう手軽さがミソです。また、ファイルが1個だけというのが手軽です。

ソースをダウンロードして眺めてみました。
本体の Wiki_in_a_jar と、HTTPD を司る XRays_Web_Framework に分かれています。

フォルダ パスの一覧

D:\DOWNLOAD\WIKI-IN-A-JAR
├─Wiki_in_a_jar
│ └─trunk
│ ├─src
│ │ └─org
│ │ └─rgse
│ │ └─wikiinajar
│ │ ├─controllers
│ │ │ AdminController.java
│ │ │ CalendarController.java
│ │ │ FindController.java
│ │ │ IndexController.java
│ │ │ TabController.java
│ │ │ TagController.java
│ │ │ VcardController.java
│ │ │ WikiController.java
│ │ │
│ │ ├─helpers
│ │ │ │ DateUtils.java
│ │ │ │ TextUtils.java
│ │ │ │
│ │ │ ├─vcard
│ │ │ │ MimeConverter.java
│ │ │ │ Utils.java
│ │ │ │
│ │ │ └─wiki
│ │ │ └─render
│ │ │ │ LineByLineFilter.java
│ │ │ │ RenderEngine.java
│ │ │ │ WikiLink.java
│ │ │ │
│ │ │ └─filters
│ │ │ BreakFilter.java
│ │ │ Filter.java
│ │ │ HeadingFilter.java
│ │ │ HrFilter.java
│ │ │ HtmlTagsFilter.java
│ │ │ IntendedFilter.java
│ │ │ ListFilter.java
│ │ │ NoWikiCaptureFilter.java
│ │ │ NoWikiInsertFilter.java
│ │ │ SectionFilter.java
│ │ │ StrongerFilter.java
│ │ │ StrongestFilter.java
│ │ │ StrongFilter.java
│ │ │ TableFilter.java
│ │ │ UrlFilter.java
│ │ │ WikiLinkFilter.java
│ │ │
│ │ ├─models
│ │ │ ITaggable.java
│ │ │ Month.java
│ │ │ Settings.java
│ │ │ TagTree.java
│ │ │ Vcard.java
│ │ │ WikiArticle.java
│ │ │
│ │ ├─server
│ │ │ Server.java
│ │ │
│ │ └─views
│ │ ├─admin
│ │ │ ShowAdminPageView.java
│ │ │
│ │ ├─calendar
│ │ │ MonthView.java
│ │ │
│ │ ├─tab
│ │ │ TabTagView.java
│ │ │
│ │ ├─tagtree
│ │ │ ShowTagTreeView.java
│ │ │
│ │ ├─vcard
│ │ │ ShowVcardView.java
│ │ │
│ │ └─wiki
│ │ EditWikiArticleView.java
│ │ ShowWikiArticleView.java
│ │
└─XRays_Web_Framework
├─branches
└─trunk
│ .classpath
│ .project
│ build.xml

├─src
│ └─net
│ └─sf
│ └─wikiinajar
│ └─xrays
│ ActionMapping.java
│ ControllerResponse.java
│ HttpServer.java
│ IServerSettings.java
│ NanoHTTPD.java
│ PublicController.java
│ Request.java
│ View.java
│ Xml.java

.NET Framework に移植するのであれば、
– HttpServer.java や NanoHTTPD.java を .net web hosts クラスに書き換え.
– ファイルアクセス部分を書き換え
– 内部で持っている(であろう)*.xmlのリソース参照部分を書き換え。

というところでしょう。
サイズ的にはどのファイルも 300行ぐらいの小さなものなので移植するのもいいかなぁ。

ちなみに開発のほうは、ひとりで作っていて、最近5か月ぐらいはアップデートしていません。
v0.8 となっていますが、v1.0 になることは無いのではないかな。

カテゴリー: 雑談 | More wiki in a jar はコメントを受け付けていません

デジタルフォトミニアルバム(仮)解析

デジタルフォトミニアルバムを手に入れました。

画面が1.5インチという狭さ、画面が128×128 ドットで内蔵メモリ 1MB。56枚格納できます/しか格納できません。
接続はPCとUSBのみ。拡張性は全くと言っていいほど無いわけですが、値段が2,000円弱ですからね。遊びにしては十分安い。

海連 Photty ホワイト PHOTTY-SQ15-WH

通常のフォトフレームの場合 USB メモリから読み込むのですが、このミニアルバムの場合は内臓のメモリにPCから書き込みます。つまり、USB の使い方が逆。

ミニアルバムを付属のUSBケーブル(20cmぐらいしかありません)に接続すると、ミニアルバム内に入っているアプリケーションが立ち上がります。私の vista の場合は、自動起動しなかったので、マイコンピュータから起動させます。

20090521_01

20090521_02

20090521_03

そう、画像を見るとわかるんですが、ドライブとして認識されています。

ということは USB メモリと似た動きになっているので、付属のアプリを使わずに画像を書き込むことは可能ではないか? と思うのですが、そうはいきません。いくつか画像を入れたのですが、それらしいファイルは無いし、データファイルも更新された様子がありません。試しに、アプリ(DPFMATE.EXE)をエクスプローラから消そうとしましたが、消せません。プロパティでは読み取り専用になっています。これも変更することはできません。

そう ROM になっているみたいです。

な~んだ、これだとこの付属アプリを使うしかないのね。つまらん。というブログもありました(場所を失念)。
さて、ここで止まってしまうとプログラマ魂が廃る(廃ってもいいけど)ので、もうちょっと調べてみます。
付属アプリが起動して、何か編集して、何処かに書き込んでいます。ミニアルバムはこの何処か(内蔵メモリ)を読み込んで画像を順番に表示しているわけです。と、いうことは、付属アプリと内臓メモリとの間で何かやりとりをしているハズ。

一番簡単なのはファイルで書きこんでいるハズですが。
で、windows からファイルの書き込みを監視する process moniter(procmon.exe)を使います。
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

これを使うと、アプリからレジストリやファイルの読み書きを監視することができます。カーネルレベルのファイルアクセスを監視するので、読み方にちょっとコツが要りますが。

このログをみると、

C:\Users\masuda\AppData\Local\Temp\PicsInMiniDPF

なるところにbmpファイルを作って転送しています。一旦

C:\Users\masuda\AppData\Local\Temp\ForShowBMP.bmp

なるファイルにコピーしているところがミソです。
# ここら辺から想像するに、ドライバの人とアプリの人が違う人なんだなぁ、というのが分かります。

ここでアクセスを詳細に見ていくと、付属アプリを起動したときにミニアルバムが接続されているドライブに対して

Operation: DeviceIoControl
Control:   IOCTL_SCSI_PASS_THROUGH_DIRECT

ってのが頻発しています。これが何かを調べると、
Windows Driver Kit: Storage Devices
IOCTL_SCSI_PASS_THROUGH_DIRECT
http://msdn.microsoft.com/en-us/library/ms803668.aspx

ってな具合に SCSI アクセスのための関数なわけです。
DeviceIoControl 関数は、デバイスに対して直接読み書きをするためのraw関数です。

と、USB メモリなはずなのに SCSI アクセスって何?と思って、ドライブのプロパティをみるとCDドライブになっています。ファイルシステムは「CDFS」です。

20090521_04

つまり、

– ミニアルバムの内臓メモリは CDFS のフォーマットで読める。
– 読み込みは DeviceIoControl 関数を使って、セクタ単位で読み込んでいるらしい?

ってことが分かりました。

なので、想像するに、

– ミニアルバムの内臓メモリは CDFS のフォーマットで書ける?
– 書き込みは DeviceIoControl 関数を使って、セクタ単位で書ける?

のかなぁ、と。

因みに、この DPFMATE.EXE、いくつかのデジタルフォトフレームで使われています。
バージョンも「v3.8.2.9」なので、ミニアルバムだけじゃなくて他にも色々ありそうですね~。
というわけで、もう少し解析すれば HACK ができそう?

カテゴリー: 雑談 | 5件のコメント