Dec 01, 2010

[Kinect] ofxKinect で Kinect の開発環境を用意する

Xcode に Kinect の開発環境を用意してみた。 ofxKinect という OpenFrameworks と OpenKinect を組み込み済みのプロジェクトテンプレートが公開されているのでそれを Xcode から読み込んだだけ。

ofTheo's ofxKinect at master - GItHub
https://github.com/ofTheo/ofxKinect
openFrameworks
http://www.openframeworks.cc/

以下、作業メモ。

ofxKinect の準備

$ git clone https://github.com/ofTheo/ofxKinect.git
$ git clone https://github.com/openframeworks/openFrameworks.git
$ cp -r ./ofxKinect ./openFrameworks/xcode\ templates/Project\ Templates/

ofxKinect デモアプリケーションの起動

./openFrameworks/xcode templates/Project Templates/ofxKinect/ofxKinect.xcodeproj を実行し Xcode を起動する。

[Xcode]

Xcode が起動したらビルドと実行を行う。例によって右上はボカシ済み。

[Demo]

Posted in Kinect | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Nov 30, 2010

[Kinect] MacOS X で Kinect にチャレンジ

Kinect ハックで楽しんでいる人が巷に溢れかえっている昨今。 あんなに楽しそうなことが出来ないのはくやしいので Kinect を購入してマネをして遊ぶことに。 とりあえず今回は MacOS X で Kinect を動作させるところまでの作業メモ。

MacOS X で Kinect を使用するには OpenKinect をインストールすれば良いらしい。 OpenKinect のインストールに関する詳細は以下のサイトを参照のこと。

OpenKinect
http://openkinect.org/
OpenKinect's libfreenect at master - GitHub
https://github.com/OpenKinect/libfreenect
Compiling OpenKinect on a stubborn OSX 10.6.5 (Updated 21/Nov)
http://www.spoofscript.com/blog/?p=327

Kinect を接続する前に

今回使用した MacOS X は Snow Leopard (10.6.5)。予め MacPorts をインストール済み。 まずは OpenKinect のインストールに必要なものを揃える。 使用した環境では git と cmake が足りないので、MacPorts を使用してインストール。

$ sudo port install git-core
$ sudo port install cmake
$ port list git-core cmake
git-core                       @1.7.3.2        devel/git-core
cmake                          @2.8.3          devel/cmake

OpenKinect のソースコードをダウンロード

git で OpenKinect のソースコードをダウンロードする。 libusb も必要となるので併せてダウンロードしておく。

$ git clone https://github.com/OpenKinect/libfreenect.git
$ git clone git://git.libusb.org/libusb.git

libusb のインストール

libusb を configure; make; make install する。 libusb に OpenKinect 用のパッチを当てる必要があるので注意。

$ cd ./libusb/
$ chmod +x autogen.sh 
$ ./autogen.sh 
$ patch -p1 < ../libfreenect/platform/osx/libusb-osx-kinect.diff 
patching file libusb/libusbi.h
patching file libusb/os/darwin_usb.c
patching file libusb/os/darwin_usb.h
patch unexpectedly ends in middle of line
Hunk #2 succeeded at 147 with fuzz 1.
$ ./configure 
$ make
$ sudo make install | tee ./install.log
Password:
Making install in libusb
test -z "/usr/local/lib" || .././install-sh -c -d "/usr/local/lib"
 /bin/sh ../libtool   --mode=install /usr/bin/install -c   libusb-1.0.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libusb-1.0.0.dylib /usr/local/lib/libusb-1.0.0.dylib
libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.0.dylib libusb-1.0.dylib || { rm -f libusb-1.0.dylib && ln -s libusb-1.0.0.dylib libusb-1.0.dylib; }; })
libtool: install: /usr/bin/install -c .libs/libusb-1.0.lai /usr/local/lib/libusb-1.0.la
libtool: install: /usr/bin/install -c .libs/libusb-1.0.a /usr/local/lib/libusb-1.0.a
libtool: install: chmod 644 /usr/local/lib/libusb-1.0.a
libtool: install: ranlib /usr/local/lib/libusb-1.0.a
test -z "/usr/local/include/libusb-1.0" || .././install-sh -c -d "/usr/local/include/libusb-1.0"
 /usr/bin/install -c -m 644 libusb.h '/usr/local/include/libusb-1.0'
Making install in doc
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/lib/pkgconfig" || ./install-sh -c -d "/usr/local/lib/pkgconfig"
 /usr/bin/install -c -m 644 libusb-1.0.pc '/usr/local/lib/pkgconfig'

OpenKinect のインストール

libusb がインストールできたら、本命の OpenKinect をインストール。 途中 ccmake 云々のくだりは手順書通りにやっただけで ccmake を知っているわけではないので不要かもしれない。

$ mkdir ./libfreenect/build
$ cd ./libfreenect/build
$ ccmake ..
※ccmake が起動したら、'c' → 'g' をタイプ。
$ cmake ..
-- Operating system is Apple MacOS X
-- Got System Processor i386
-- libfreenect will be installed to /usr/local
-- Headers will be installed to /usr/local/include/libfreenect
-- Libraries will be installed to /usr/local/lib
-- Found libusb-1.0:
--  - Includes: /usr/local/include
--  - Libraries: /usr/local/lib/libusb-1.0.dylib
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/me/libfreenect/build
$ make
$ sudo make install | tee ./install.log
Password:
[ 33%] Built target freenect
[ 66%] Built target freenectstatic
[ 73%] Built target glview
[ 86%] Built target fakenect
[ 93%] Built target record
[100%] Built target freenect_sync
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/libfreenect.0.0.1.dylib
-- Installing: /usr/local/lib/libfreenect.0.0.dylib
-- Installing: /usr/local/lib/libfreenect.dylib
-- Installing: /usr/local/lib/libfreenect.a
-- Installing: /usr/local/include/libfreenect/libfreenect.h
-- Installing: /usr/local/include/libfreenect/libfreenect.hpp
-- Installing: /usr/local/bin/glview
-- Installing: /usr/local/lib/fakenect/libfreenect.0.0.1.dylib
-- Installing: /usr/local/lib/fakenect/libfreenect.0.0.dylib
-- Installing: /usr/local/lib/fakenect/libfreenect.dylib
-- Installing: /usr/local/lib/libfreenect_sync.0.0.1.dylib
-- Installing: /usr/local/lib/libfreenect_sync.0.0.dylib
-- Installing: /usr/local/lib/libfreenect_sync.dylib
-- Installing: /usr/local/include/libfreenect/libfreenect_sync.h

Kinect の動作確認

OpenKinect に添付されているサンプルアプリケーションで Kinect の動作確認をする。 まずはサンプルアプリケーションのビルドから。

$ cd ./libfreenect/examples/
$ cp ../include/* .
$ cmake .
$ make

make が正常に終了したら、Kinect を Mac に接続する。 接続したらサンプルアプリケーションを起動する。
$ ./glview 
Kinect camera test
Number of devices found: 1
GL thread
   (略)

起動すると以下の様に Kinect から取得した画像が表示される。 右側に実際はもっときちんとした画が表示されるが、お見せできるような状況ではないためボカしてある。

[サンプルアプリケーション]

Posted in Kinect | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Nov 29, 2010

[Apple] MacPorts の "db46 requires the Java..." エラー

MacPorts でアップデートをしようとしたら以下の様なエラーが発生した。

$sudo port upgrade outdated
   (略)
Error: db46 requires the Java for Mac OS X development headers.
Error: Download the Java Developer Package from: <https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=20719>
Error: Target org.macports.configure returned: missing Java headers
Error: Failed to install db46
Log for db46 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_databases_db46/main.log
Error: The following dependencies were not installed: python26 db46 gdbm rsync popt
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>

メッセージの通り https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?bundleID=20719 から Java for Mac OS X 10.6 Update 3 Developer Package をダウンロード(要 Apple ID)し、インストールして一件落着。

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 22, 2010

[Apple] Apple が MacOS X での Java 提供の打ち切りを示唆

今までも Java に全く力を入れてこなかった Apple が遂に完全にやる気を無くした様だ。 Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes によると、

As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated.

This means that the Apple-produced runtime will not be maintained at the same level, and may be removed from future versions of Mac OS X. The Java runtime shipping in Mac OS X 10.6 Snow Leopard, and Mac OS X 10.5 Leopard, will continue to be supported and maintained through the standard support cycles of those products.
願わくは、OS 同梱でなくても構わないので MacOS X 用 JDK を我に与え給へ。

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 17, 2010

[Library] Apache Axis2 で SOAP Request/Response を GZIP 圧縮する方法

Apache Axis2 で SOAP Request/Response を GZIP 圧縮する方法をメモ。

コード

Options を生成し、Stub (実際には WSDL から自動生成された Stub のサブクラス) にセットする。 MC_GZIP_REQUEST が SOAP Request の圧縮可否。 MC_ACCEPT_GZIP が SOAP Response の圧縮可否。 詳細は下記のリンクを参照のこと。

Stub stub = 
Options options = new Options();
options.setProperty(HTTPConstants.MC_GZIP_REQUEST, true);
options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);
stub._getServiceClient().setOverrideOptions(options);
Options#setProperty
http://ws.apache.org/axis2/1_5_1/api/org/apache/axis2/client/Options.html#setProperty(java.lang.String,%20java.lang.Object)
HTTPConstants
http://ws.apache.org/axis2/1_5_1/api/org/apache/axis2/transport/http/HTTPConstants.html

動作確認

Apache Axis2 で HTTP Request/Response を確認する方法 でログを出力すると、以下のヘッダを確認できる。

2010-10-17 23:56:29,026 DEBUG [main] (Wire.java:70) - >> "Accept-Encoding: gzip[\r][\n]"
2010-10-17 23:56:29,026 DEBUG [main] (Wire.java:70) - >> "Content-Encoding: gzip[\r][\n]"
ちなみに、某サービスの軽量 SOAP 通信で GZIP 圧縮を ON にしてみたところ通信速度が 30% 速くなった。 サービスが GZIP 圧縮に対応しており、クライアントの CPU に余裕があれが是非 ON にしておきたい。
但し、GZIP 圧縮を ON にするとログに出力される SOAP Request/Response の目視での確認は困難になる。 デバッグの際には OFF にする必要がある。

Posted in Library | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 09, 2010

[Library] Apache Axis2 で HTTP Request/Response を確認する方法

Axis2 は通信に Apache HttpComponents を使用しているので Log4j で HTTP Request/Response を確認することができる。 SOAP 通信の内容を見られるのでデバッグの際にとても便利。

log4j.xml の設定方法

"httpclient.wire" カテゴリのログレベルを "debug" にするだけ。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <!-- for Axis2 -->
  <category name="httpclient.wire">
    <priority value="debug" />
  </category>
  <!-- /for Axis2 -->

</log4j:configuration>

ログ出力例

2010-10-08 23:02:45,670 DEBUG [main] (Wire.java:70) - >> "POST /services/Soap/u/20.0 HTTP/1.1[\r][\n]"
2010-10-08 23:02:45,682 DEBUG [main] (Wire.java:70) - >> "Content-Type: text/xml; charset=UTF-8[\r][\n]"
2010-10-08 23:02:45,682 DEBUG [main] (Wire.java:70) - >> "SOAPAction: "urn:partner.soap.sforce.com:Soap:loginRequest"[\r][\n]"
2010-10-08 23:02:45,682 DEBUG [main] (Wire.java:70) - >> "User-Agent: Axis2[\r][\n]"
2010-10-08 23:02:45,683 DEBUG [main] (Wire.java:70) - >> "Host: test.salesforce.com[\r][\n]"
2010-10-08 23:02:45,683 DEBUG [main] (Wire.java:70) - >> "Transfer-Encoding: chunked[\r][\n]"
2010-10-08 23:02:45,683 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,146 DEBUG [main] (Wire.java:70) - >> "143[\r][\n]"
2010-10-08 23:02:46,146 DEBUG [main] (Wire.java:84) - >> "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>(略)</soapenv:Body></soapenv:Envelope>"
2010-10-08 23:02:46,147 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,147 DEBUG [main] (Wire.java:84) - >> "0"
2010-10-08 23:02:46,147 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,148 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,488 DEBUG [main] (Wire.java:70) - << "HTTP/1.1 200 OK[\r][\n]"
2010-10-08 23:02:46,488 DEBUG [main] (Wire.java:70) - << "HTTP/1.1 200 OK[\r][\n]"
2010-10-08 23:02:46,490 DEBUG [main] (Wire.java:70) - << "Server: [\r][\n]"
2010-10-08 23:02:46,490 DEBUG [main] (Wire.java:70) - << "Content-Type: text/xml; charset=utf-8[\r][\n]"
2010-10-08 23:02:46,491 DEBUG [main] (Wire.java:70) - << "Content-Length: 1626[\r][\n]"
2010-10-08 23:02:46,491 DEBUG [main] (Wire.java:70) - << "Date: Fri, 08 Oct 2010 23:02:46 GMT[\r][\n]"
2010-10-08 23:02:46,491 DEBUG [main] (Wire.java:70) - << "[\r][\n]"
2010-10-08 23:02:46,499 DEBUG [main] (Wire.java:84) - << "<?xm"
2010-10-08 23:02:46,502 DEBUG [main] (Wire.java:84) - << "l version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body>(略)</soapenv:Body></soapenv:Envelope>"

Posted in Library | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 08, 2010

Oct 07, 2010

[Apple] MacOS X でコマンドラインからクリップボードを利用する方法

MacOS X では pbcopy と pbpaster というコマンドが用意されており、コマンドラインから簡単にクリップボードにアクセスすることができる。

$ echo "hoge" | pbcopy
$ pbpaste
hoge
$

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 06, 2010

[Linux] bash で入力補完を設定する方法

シェルを使っていると必ずお世話になる入力補完。 ls と打って、tab を押さないことはまず無いくらい。 自作コマンドでも入力補完に対応したかったので、設定方法を調べてみた。

An introduction to bash completion: part 1
http://www.debian-administration.org/articles/316
An introduction to bash completion: part 2
http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2
Completion examples
http://bashcookbook.com/bashinfo/source/bash-3.0/examples/complete/complete-examples

設定の基本

コマンド毎に入力補完用の関数を用意し、complete コマンドでシェルに登録する。 例えば、mycmd コマンド用の入力補完関数はこんな感じで記述する。

_mycmd() {
  local cur prev
  cur=${COMP_WORDS[COMP_CWORD]}
  prev=${COMP_WORDS[COMP_CWORD-1]}
  COMPREPLY=()
  if (( $COMP_CWORD <= 1)) || [[ "$cur" == -* ]]; then
    COMPREPLY=( $(compgen -W '-f --file -h --help -v --version' -- $cur) );
    return 0;
  fi
  if [ "$prev" == '-f' -o "$prev" == '--file' ]; then
    COMPREPLY=( $(compgen -f -- $cur) )
    return 0;
  fi
}

入力中の値が COMP_WORDS から取得できるので、その値を基に補完情報を作成し COMPREPLY にセットする。 補完情報の作成をサポートしてくれる compgen が提供されているので、これを使うと便利。
シェルへの登録は前述の通り complete コマンドで行う。

complete -F _mycmd mycmd

ファイル名を補完する方法

compgen をパラメータ "f" で実行する。

    COMPREPLY=( $(compgen -f -- $cur) )

選択肢を補完する方法

compgen をパラメータ "W" で実行する。 "W" の後に選択肢をスペース区切りで指定し、"-- $cur" で入力中の文字とマッチするものだけを補完情報として使用する。

    COMPREPLY=( $(compgen -W '-f --file -h --help -v --version' -- $cur) );

Posted in Linux | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Sep 10, 2010

[Library] GWT で Date を文字列化する

GWT で java.util.Date を文字列化する方法をメモ。 Calendar、DateFormat 等が利用できないので Date の deprecated メソッドで年月日などをそれぞれ取得し文字列化するか、 GWT 提供のクラス DateTimeFormat を使用する必要がある。 DateTimeFormat の使用例は以下の通り(使用例を示す程のものでもないけれど・・・)。

import java.util.Date;
import com.google.gwt.i18n.client.DateTimeFormat;

Date date = new Date(dateAsLong);
DateTimeFormat formatter = DateTimeFormat.getFormat("yyyy/MM/dd HH:mm");
String str = formatter.format(date);

Posted in Library | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Sep 08, 2010

[Cloud] Google App Engine ローカル実行環境のデータストア

GAE のローカル実行環境でのデータストアに関する情報をメモ。

Google App Engine - データストアの使用
http://code.google.com/intl/ja/appengine/docs/java/tools/devserver.html#Using_the_Datastore

データストアを参照・編集する

Datastore Viewer を使用する。 サーバを起動した状態で

http://127.0.0.1:8888/_ah/admin/datastore
にアクセスする。 ポート番号は環境に依存する可能性があるので、適宜確認のこと。

データストアをクリアする

以下のファイルを削除することでデータストアをクリアできる。

  • $PROJECT_HOME/war/appengine-generated/datastore-indexes-auto.xml
  • $PROJECT_HOME/war/appengine-generated/local_db.bin

Blob データ

Blobstore に保存したデータは、以下のファイルに保存される。

  • $PROJECT_HOME/war/appengine-generated/<BlobKey の値>

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Sep 03, 2010

[Cloud] Salesforce.com Winter '11 release

Salesforce.com の次期リリース WInter '11 を試用できる環境が公開された。

Sign-up Now: Winter '11 Pre-Release Trial
http://sites.force.com/blogs/ideaView?c=09a30000000D9xo&id=08730000000IyGzAAK

Winter '11 の正式なリリース日程は以下を参照。

Winter ’11 General Release Maintenance Windows
http://trust.salesforce.com/trust/status/

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 27, 2010

[Misc] システムの色覚異常への対応について

色覚異常対応について調べたのでメモ。

色覚異常

色覚異常には先天色覚異常と後天色覚異常がある。

先天色覚異常

先天赤緑色覚異常は先天色覚異常の中で最も多く存在し、赤系統や緑系統の色の弁別に困難が生じる人が多いといわれる。 日本人では男性の4.50%、女性の0.165%が先天赤緑色覚異常で、日本全体では約290万人が存在する。 白人男性では約8%が先天赤緑色覚異常であるとされる。
(Wikipedia - 色覚異常)
2型色覚(2型2色覚と2型3色覚)の人が間違えやすい組み合わせは、赤と緑、オレンジと黄緑(きみどり)、緑と茶、青と紫、ピンクと(しろ)・灰色、緑と灰色・黒です。 1型色覚(1型2色覚と1型3色覚)の場合これに、赤と黒、ピンクと青が加わります。
(目と健康シリーズ - 色覚の異常)

後天色覚異常

後天色盲は遺伝的背景に関わらず、誰にでも発症する可能性があるものが多いのが特徴と言える。 その原因は、角膜、水晶体、硝子体といった中間透光体の着色によるもの、網膜病変によるもの、緑内障によるもの、視神経病変によるもの、大脳性病変によるもの、心因性要因によるものなど様々であるが、何よりもすべての人に関係する問題として、加齢に伴う色覚の変化がある。

後天色盲でもっとも多い、後天青黄色盲の色感覚をまとめると次のようになる。
  • 青の範囲が広く、健康な眼の 青紫〜青〜青緑〜緑〜黄緑 までを青として知覚し、緑の感覚を失う。
  • 黄色は彩度が低下して白っぽく見える。
  • 低明度、低彩度の色は、ほとんど青または無彩色に見える。
  • 「黄色」→「白」、「緑」→「青または黒」、「茶」→「紫または黒」、「紫」→「青、茶、黒」、「青」→「黒」などの色誤認をする。

(色覚の多様性と視覚バリアフリーなプレゼンテーション - 色覚が変化すると、どのように色が見えるのか?)

Web サイトにおける色覚異常対応のガイドライン

w3c が策定している Web Content Accessibility Guidelines (WCAG) 2.0 に色覚異常対応に関する記載がある。ここでは Level A/AA/AAA の 3 レベルが定義されており、想定するユーザが必要とするレベルの対応を行う。

1.4.1 Use of Color: Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element. (Level A)
1.4.3 Contrast (Minimum): The visual presentation of text and images of text has a contrast ratio of at least 4.5:1, except for the following: (Level AA)
  • Large Text: Large-scale text and images of large-scale text have a contrast ratio of at least 3:1;
  • Incidental: Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement.
  • Logotypes: Text that is part of a logo or brand name has no minimum contrast requirement.
1.4.6 Contrast (Enhanced): The visual presentation of text and images of text has a contrast ratio of at least 7:1, except for the following: (Level AAA)
  • Large Text: Large-scale text and images of large-scale text have a contrast ratio of at least 4.5:1;
  • Incidental: Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement.
  • Logotypes: Text that is part of a logo or brand name has no minimum contrast requirement.

各レベルの詳細な情報は下記を参照。
Understanding Guideline 1.4
http://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast.html
Understanding Success Criterion 1.4.1 [Use of Color]
http://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-without-color.html
Understanding Success Criterion 1.4.3 [Contrast (Minimum)]
http://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-contrast.html
Understanding Success Criterion 1.4.6 [Contrast (Enhanced)]
http://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast7.html


WCAG 2.0 準拠の評価

WCAG 2.0 の各レベルではコントラスト比が規定されているので、システムがそのコントラスト比を満たすことを確認する。 コントラスト比の算出方法は以下を参照。

WCAG 2.0 - contrast ratio
http://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-contrast.html#contrast-ratiodef
WCAG 2.0 - relative luminance
http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
The Web KANZAKI - 色の組み合わせをチェックしてみる
http://www.kanzaki.com/docs/html/color-check

色覚異常をシミュレートする

ImageJ と VischeckJ を使用することで色覚異常をシミュレートすることができる。

ImageJ
http://rsb.info.nih.gov/ij/
Vischeck
http://www.vischeck.com/


ImageJ と VischeckJ のインストール

  1. ImageJ をダウンロード、解凍する。解凍先を $IMAGEJ_HOME とする。
  2. VischeckJ をダウンロード、解凍する。解凍先を $VISCHECKJ_HOME とする。
  3. $VISCHECKJ_HOME/*.class を $IMAGEJ_HOME/plugins/VischeckJ/ にコピーする。


シミュレーションの実施

  1. シミュレートしたい画面をキャプチャし、画像として保存する。
  2. ImageJ を起動し、画像を開く。
  3. Plugins > VischeckJ > &Vischeck Panel を選択。
          [ImageJ]
  4. Deuteranope(緑色覚異常)、Protanope(赤色覚異常)、Tritanope(青黄色覚異常) ボタンをクリックする。
          [imagej]
[original]
オリジナル
[deuteranope]
緑色覚異常
[protanope]
赤色覚異常
[tritanope]
青黄色覚異常

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 23, 2010

[Cloud] ApexHighlighter for SyntaxHighlighter

Salesforce の Apex コードをハイライト表示する JavaScript を作成してみた。詳細はこちら。 ApexHighlighter

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 12, 2010

[Bookmark] Today's bookmark

[Library] HTML5.jp - レーダーチャート... JavaScript によるレーダーチャート。
[Library] A HTTP Proxy Server in 20 Lines of node.js Code... JavaScript による Proxy Server。
[Misc] 情報処理推進機構 - 安全なウェブサイトの作り方 改定第 4 版
[Library] Open Flash Chart 2... LGPL ライセンスの Flash Chart。
[Cloud] Salesforce Winter '11 Logo... Salesforce の次期リリースのロゴ決定。
[WebService] Web屋のネタ帳 - スマートフォン時代の電話番号認証の実装... 使う機会は無さそうだが面白いネタ。
Posted in Bookmark | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

[Misc] CSS による印刷制御に関するメモ

CSS による印刷制御に関して個人的に抑えておきたいことをメモ。

改ページ

page-break-before, page-break-after で改ページの制御が可能。 指定可能な値は auto、always、avoid、left、right のいずれか。

<div class="page" style="page-break-after: always;">
  ここが 1 ページ分。
</div>
Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification - 13 Paged media
http://www.w3.org/TR/CSS2/page.html#page-break-props

A4 に印刷する場合は 649px x 891px

A4(210mm x 297mm) に印刷する場合は、1 ページを 649px x 891px 以内に抑える。

その他参考

参考になるサイトをメモ。素晴らしい情報に感謝。

ADP: 印刷用CSSの書き方(基本編)
http://adp.daa.jp/archives/000690.html
無限の翼 : IE6、7用対応:A4サイズで印刷出来るスタイルシート指定
http://mtw.cocotte.jp/blog/diary/html/2009/05/07-2234.php
PHP × Ajax = Cool CMS - [CSS] 印刷用ページを実装する方法
http://blog.aidream.jp/css/css-print-javascript-67.html
BlogでHTML日進月歩 - 印刷用CSSの導入
http://cellery.blog21.fc2.com/blog-entry-14.html

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 11, 2010

[Apple] MacOS X で秀丸エディタを使う方法

MacOS X の最大の弱点は良いテキストエディタが無い(見つからない?)ことだと思っている。 以前 Darwine メモ で Wine + 秀丸エディタを試した際は、起動は出来るが日本語表示と日本語入力が出来ないという状態であきらめた。 今回、MikuInstaller という Wine お手軽導入キットがあることを知ったので再度 MacOS X + 秀丸エディタにチャレンジしてみた。

MikuInstaller とは

MikuInstaller 公式サイト によると、

MikuInstaller は、 Wine を Intel 搭載 Macintosh に手軽に導入するためのキットです。
とのこと。

MikuInstaller のインストール

dmg をダウンロード、マウントして、MikuInstaller.app を /Applications にコピーするだけ。 今回は "MikuInstaller-20080803.dmg" を使用した。 ちなみに、MacOS X は SnowLeopard (10.6.4) を使用している。

秀丸エディタのインストール

秀丸エディタのページからインストーラパッケージをダウンロード(今回は "hm801a_signed.exe" を使用した)し、 ダウンロードした exe を /Applications/MikuInstaller.app にドロップ。
しばらくすると秀丸エディタインストーラのダイアログが開く。
[インストーラが開始された]

次の様な警告ダイアログが表示されるかもしれないが、そのまま続行して良い。
[警告ダイアログ]

後は普通にインストールを行う。インストールが完了したら /Users/me/Applications/MikuInstaller 内に "秀丸.app" が作成されている。
[秀丸.app が作成されている]

秀丸エディタの起動

/Users/me/Applications/MikuInstaller/秀丸.app を起動するだけ。
[秀丸が起動!!]

今回は日本語表示、日本語入力共に可能だった。 MacOS X 側のストレージにあるファイル読込・書出も可能。

素晴らしい!!!

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 09, 2010

[WebService] mov ファイルを Google Sites に埋め込む Google Gadget

Google Sites に mov ファイルを埋め込む Google Gadget を作成したのでメモ。 URL はこちら。

http://www.in-vitro.jp/software/google/gadget/ggadget_qtobject.xml

実際の埋め込みは QTObject embed という外部のライブラリにお任せしている。多謝。

QTObject embed
http://blog.deconcept.com/code/qtobject/qtobject.html
オリジナルガジェットの作成
http://code.google.com/intl/ja/apis/gadgets/docs/basic.html

使い方

  1. 予め Google Sites のページを作成し、mov ファイルとタイトル画像を添付しておく。
  2. Google Sites の編集画面で Insert > more gadgets... > Add gadget by URL を選択。
  3. 上記 URL を入力して "Add"。
  4. mov のタイトル、 mov の URL、タイトル画像の URL、mov の width、height(実際のサイズより少し大きめにする) を入力

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Aug 04, 2010

[Flash] Flash on IE6 は gzip 圧縮されたデータを読み込めない

意外と難儀な問題に当たったのでメモ。

現象

IE6 上の Flash Player から ActionScript の URLLoader 等を利用してサーバにデータを取りに行く際、 サーバが gzip で圧縮されたデータを返すと IOErrorEvent.IO_ERROR (Error #2032) が発生する。

回避方法

ActionScript の URLRequestHeader クラスには Accept-Encoding は指定できないとリファレンスに記載があるのでクライアントサイドでの回避は困難。 但し、未検証なので絶対に無理かは不明。 ざっと見た限りでは皆さんサーバサイドで gzip を OFF にして回避している模様。

・・・今の環境だとそんな設定許されないから悩ましい。

関連情報

dmpmorg の日記さんに丁寧な解説があった。多謝!!!

dmpmorgの日記 - FlexのURLLoaderでIE6だけ「#2032: ストリームエラー」 原因はgzip?CommentsAdd Star
http://d.hatena.ne.jp/dmpmorg/20090612/1244795718
Flash not recieving xmls when embedded in IE and GZIP compression is enebled in IIS (server sending xml)
http://bugs.adobe.com/jira/browse/FP-330
GZip compression + Flash Player + IE6 = Nightmare
http://www.ultrashock.com/forums/data-communication/gzip-compression-flash-player-ie6-nightmare-122911.html

Posted in Flash | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

[Flash] Open Flash Chart でデータを HTML 内に埋め込む方法

Open Flash Chart でチャート用の JSON データを HTML 内に埋め込む方法をメモ。

<script type="text/javascript" language="javascript" src="swfobject.js" ></script>
<script type="text/javascript">
  var chartData = '{"elements":[{"type":"line","values":[1,2,3,4]}]}'; // ここにチャート用の JSON データを埋め込む。
  swfobject.embedSWF("open-flash-chart.swf", "chart", "300", "300", "9.0.0", "expressInstall.swf", {"get-data":"getChartData"});
  function getChartData() {
    return chartData;
  }
</script>
<div id="chart"></div>

"get-data" に JSON を返す JavaScript の function を指定するだけ。

詳細な情報は以下を参照のこと。
Advanced : Many charts on one page
http://teethgrinder.co.uk/open-flash-chart-2/adv-js-2-charts.php

Posted in Flash | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 28, 2010

[Cloud] Salesforce 用 Ubiquity Command を公開してみる

Salesforce 上での開発作業を楽にするための Ubiquity 用 Command を試しに公開してみる。 またしてもかなりニッチなので(笑)、私以外に使う人が居るかはかなり疑問ではあるが。

解説とインストールは Salesforce 用 Ubiquity Command

Salesforce.com
http://www.salesforce.com/
Ubiquity
https://mozillalabs.com/ubiquity/

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 27, 2010

[Cloud] Salesforce Setup にカスタムメニューを追加する Geasemonkey Script を公開してみる

Salesforce の Setup 画面に 『私が』 良く使う機能へのリンクを追加する Greasemonkey Script を試しに公開してみる。Force.com をメインに開発している人は国内に居るのだろうか?? このスクリプトのニーズ、ほとんど無い気がする(笑)

解説とインストールは Salesforce Setup にカスタムメニューを追加する Geasemonkey Script

Salesforce.com
http://www.salesforce.com/
Greasemonkey
http://www.greasespot.net/

Posted in Cloud | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 15, 2010

[Apple] MacOS X で .bashrc を使う方法

MacOS X (Snow Leopard) で .bashrc を使う方法をメモ。

.bash_profile の作成

まず ~/.bash_profile を作成する。ユーザ名が me の場合、/Users/me/.bash_profile を作成すれば良い。 .bashrc を使うだけであれば以下の内容で作成するだけで OK。

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

.bashrc の作成

後は ~/.bashrc を作成して適宜内容を記述すれば OK。

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |