digital matter
Internet Explorer 6さようなら運動はじめました!

‘解決’ カテゴリーのアーカイブ

SilverlightのTestPage.htm自動生成をやめる

やめる、というか、HTMLのobject要素内にparamとか追加したかったので、別ページを用意して、そのファイルをビルド時に実行してくれるようにしたいのです。

ASP.NETのプロジェクトがくっついている場合はそちらを修正すればいいのですが、Silverlightプロジェクトを単体で作ってしまった場合用。

環境はVisual Studio 2010 ベータを使っています。

メニューの[プロジェクト]から、[新しい項目の追加]、[HTMLファイル]を選択して1ページ作成してやります。

スケルトンのHTMLがエディタに表示されるので、Silverlightを呼び出すタグを書きます。自動生成されたTestPage.htmの内容でもコピーして作ると楽。

ちなみに実行自体はプロジェクトのルートフォルダにできるので、xapファイルのパスの前にBin/debug/などをつけてやる必要あり。(出力ディレクトリにコピーできるけど、コピーしてもそちらが実行されるわけではない)

で、プロジェクトのプロパティで、デバッグ→開始動作のラジオボタンを[テスト ページを動的に生成する]から[ページを指定する]に変更して、htmlファイルを選択。完了。

Encoding.GetString(Byte[])はSilverlightで使えない

今日のびっくり。

‘System.Text.Encoding.GetString(byte[])’ はアクセスできない保護レベルになっています。

Encoding.UTF8.GetString(data);

こんなコードを書くとビルド時エラーになります。

なぜか、Encoding.GetString(Byte[], Int32, Int32)は使えます。

Encoding.UTF8.GetString(data, 0, data.Length);

こうしておけばOK。何だろう、この仕様。

今日の微妙エラー

コントロールはひとつの case ラベル (‘default:’) から別のラベルへ流れ落ちることはできません。

switch (message)
{
    case "hoge":
        funcA();
        break;
    default:
        funcB();
        break; // これがないとエラー
}

他の言語のクセでbreak書かなかったら起きた。

「フォールスルー」ってことなんですね。

ちなみにcaseのあとのブロックにコードを書かなければフォールスルーはできるという話。

Windows 7 x64でのVirtual PCとdebian

Windows 7 x64環境のWindows Virtual PCに、以前Vista 32bit版のMicrosoft Virtual PC 2007で使っていたdebian Lennyの仮想マシンを持ってきて起動させようとしたら、ブートの途中で何もエラーも表示せずに応答しなくなってしまったので対策を調査。

多分Windows 7どうこうではなくて、64bit版だということが問題っぽい。

MicrosoftVirtualPc2007/lenny – Debian Wiki

noreplace-paravirtパラメータを追加しておけば良いだけ。

まぁ、すでに設定していた場合は何もせずに移行できたって話ですね。Windows Virtual PCとVirtual PC 2007間での互換性問題はほとんどなさそう。

追記

NICを認識しない…やっぱりdebianを64bit版にするしかないのか…?

hid.libをリンクしようとしたときにLNK2001エラーになる問題

MUDFでドライバ開発中なのですが、hid.libを使いたくて、sourcesにhid.lib追加、internal.hにHidsdi.hのインクルード記述をしてみたところ、ビルド時にLNK2001エラーが発生。

結局はHidsdi.hがCソースなのでextern "C"{}で囲ってやればOKというお話です。

extern "C"{
#include <Hidsdi.h>
}

Windows 7でファイル所有者と書き込み権限をコマンドプロンプトから操作する

多分Vistaも同じだと思うのだけど、HDDを別のマシンに移した際、アクセスできない・消せないファイルが大量にあったので、それらをまとめてコマンドプロンプトからコマンドで再帰的に処理すべくやったことと注意点のメモ。

Program Files以下のフォルダ・ファイルの所有権を自分のPCの管理者に変更する
takeown /F "Program Files" /R /A

Everyoneに対してフルコントロール権限を与えて、誰でも編集できるようにする
icacls "Program Files" /grant Everyone:(F) /T

注意しないといけないのは、フォルダを辿るときに、NTFSのJUNCTIONも辿ってしまうので、ジャンクションは先に消しておいた方がいいかも。
そうしないとうっかり現行のシステムファイルを消しかねない。
というか実際、現行システムのACL書き換えをやらかした。
まさに「FドライブのUsersフォルダの権限を書き換えていたら、いつのまにかCドライブの権限を書き換えていた…!」という状態。
怖い怖い。

ジャンクションかどうかの確認は、コマンドプロンプトからdir /aとかで。

シンボリックリンクも同じかな。どっちも使われているみたいなので注意。

SafariのkCFErrorDomainCFNetwork error 303.

iPhone用のWebサイトを作っていてSafariで発生した
Operation could not be completed. (kCFErrorDomainCFNetwork error 303.)
というエラー。

ページを読み込む途中で上記のエラーで止まってしまうので悩んでいたのですが、Proxyが問題でした。

というか、サーバがTransfer-Encoding: chunkedで送信してきた場合に、Proxyの挙動が仕様と異なる場合に起こるようです。TCPコネクションの問題かな…?

Transfer-Encoding: chunkedになるのは主にサーバからPHPとかで動的にページ書き出す場合ですね。

サーバ側でContent-Lengthを返すようにするか、Proxyを外すかってところですかね。

Fiddler使う際には注意。

iPhoneのSafariでtouchendイベントを使うときの注意

iPhone用のドラッグアンドドロップで操作できるWebアプリを作っていて、うっかりはまったtouchendの挙動についてのメモ。

最初に書いたコードはこんな感じでした。

function touchhandler(e) {
    var x = e.touches[0].pageX;
    switch (e.type) {
        case 'touchstart':
            break;
        case 'touchmove':
            break;
        case 'touchend':
            break;
    }
}

document.getElementById('sample').addEventListener("touchend", touchhandler, false);

このプログラムではtouchendの処理が実行されません。

というのもまぁ、気づけば簡単なことなんですが、最後の指をスクリーンから離してtouchendのイベントが発生するときは、もうスクリーンに触ってないのでe.touches[0]がundefinedになるんですね…

なので、touchendのときは、引数で受け取ったe.touchesは注意しましょうという話。

今回参考にさせていただいたのは以下のサイト。

flashcast:フリーで働くITエンジニア集団のブログ: ipod touch用のWeb Applicationを作成してみる(canvasでお絵かき編)

SitePen

Web開発参考サイト – iPhone 3G DevWiki

Windows 7でSynergyを使おう

ライセンス版で数週間早く入手したものの、結局パッケージ版が発売されてからインストールしました。Windows 7。

XPの入っていたノートPC(Panasonic Let’snote R5)にWindows 7 Professionalをインストールしたので、とりあえずメインPCから操作できるようにしようと、Synergyをインストールするも…手動で起動すれば動作するものの、自動起動すると動作せず。管理権限で実行してサービスに登録しても動作せず。というか、繋がってはいるみたいなんですけどね。サーバ側のマウスがどこかに行ってしまうので。

で、synergyは2006年に更新が止まって、Vistaも対応していないし、何か後継があるハズ…と思って英語のWikipediaを見たら、synergy-plusというフォークプロジェクトがあったんですね。

Google先生も、「synergy」で検索したら、「もしかして synergy-plus」くらい出してほしいところですが…

32bit版、64bit版もあるので、7から64bitに乗り換えた人も安心ですね。

plusを入れる前に、一度synergyを入れていたので、設定情報を引き継いでくれているようです。といっても必要な設定項目はHost Nameの設定だけですけど。

とりあえずsynergy-plus-1.3.4-Windows-x86-r1.exeをダウンロードしてインストール。今回はクライアント側(操作される側)として使います。

やっぱり色々問題ありました…

  • ログイン画面では入力ができない
  • UACになると操作はできない

あぁ、微妙…というか、大して改善されてないですね…

自動ログインにしてWindows7のUACも無効にしてしまえばいいのかなぁ…複数ユーザ使いたい場合はどうしようもないしなぁ…

Vistaでの対策は以下のページ参照。

Fixing Problems with Synergy on Windows Vista :: the How-To Geek

Windows 7でUACを無効にするには以下のサイト参考。

Disable User Account Control(UAC) For Administrators Only :: the How-To Geek

ざっくり日本語版での対応を説明すると、

スタートメニューの検索からsecpol.mscと入力して実行。ローカルポリシーのセキュリティオプションから、「ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作」をダブルクリックして、「確認を要求しないで昇格する」を選択。

らしいですよ?試してないですが。

結論としては、今後に期待…

ARToolkitのセットアップメモ

ARToolkitで開発してみようと思い立ったのでセットアップの自分メモ。

工学ナビ – 「攻殻機動隊」「電脳コイル」の世界を実現! – ARToolKitを使った拡張現実感プログラミング

工学ナビの中の人の研究と周辺 ゼロからはじめるARToolKit on VisualC++ 2008 Express Edition

VC++ 2008 Express EditionでARToolkitをビルドしてみる – やざわラボ Wiki

Visual C++ 2008 Express Editionを使ったのですが、1番目のサイトの情報そのままで大体はOK。

サンプルの実行は3番目のサイトにあるように、「デバッグ」-「新しいインスタンスを開始」でsimpleLiteとか実行できます。

うっかりハマったのは、Dataフォルダの置き場所。というか、実行したいサンプルのそれぞれのオプションに

「デバッグ」-「作業ディレクトリ」 – ARToolkit/binの絶対パス

を書かないとダメだったんですね。さもなくば、ARToolKit\examples\simpleLiteの下にDataフォルダ置いてください。

あと、DSVLはバイナリが公開されているので、ダウンロードしてくれば自分でビルドする必要なし。