スキャナをTWAINで使うセットアップ作業

今まで使用していた、プリンタ&スキャナ複合機が故障したので新たにスキャナ単独機を購入した。

Canoscan LiDE 700Fを購入したのだがこれがなかなか使い勝手がいい。

  • USBバスパワー駆動
  • 縦置き使用可能
  • Twain対応

以上三点が使い勝手の良いポイント。これらにより取り回しの良さ・省スペース・画像編集ソフトなどとの連携のスムーズさが実現されている。

しかし3点目のTwain機器として利用する際、ちょっとつまずきがあったので覚書。

まず、Twain対応のドライバをインストール。Twainで画像を取り込んでみる。と、早速のエラー。

「MSVCP100.dll が見つからなかったため、このアプリケーションを開始できませんでした。」

とのこと。なんのこっちゃ~と思いつつ、msvcr100.dll-Dll ファイルダウンロード,フリー(無料)よりMSVCP100.dllをダウンロードしてsystemフォルダにコピー。

これで文句なかろう。ともう一度テストすると

「プロシージャ エントリポイント wmemcpy_s がダイナミック リンク ライブラリ MSVCR100.dll から見つかりませんでした。」

というエラーが!これは意味不明すぎる。ググッてみると、他のシチュエーションで同内容のエラーが出た場合の対処方法が出てきました。

どうやらVC++2010をインストールすると治るそうなので、ダウンロード詳細 Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)よりダウンロードしてインストール。

再起動するとしっかり動作するようになりました。

Twain機器として使用できると一気に使用感が変わります。スキャナやUSBカメラをお持ちの方は是非お試しを。

カテゴリー: PC | 2件のコメント

IS01標準ブラウザにブックマークレットを登録する

ちょっと昔8円Android端末として話題となったIS01を所有しています。OSが1.6のままアップデートなしという衝撃の展開ですでに使っているユーザーも減っているであろうなか、僕は未だに寝モバ・オフラインマップ・ジオタグカメラ・音楽プレーヤーあたりの用途でがっつり使っています。

ブラウザは、意外と作りがしっかりしている印象の標準ブラウザをそのまま使っているんですが、ひとつ困るのがブックマークレットをすんなり登録できないこと。主な障害は…

  • ブックマークレットのリンクを長押ししてもブックマークに登録するメニューが表示されない。
  • 「javascript:」で始まるURLを登録しようとする時に、ご親切にも「http://」を付け加えてくれてしまう。

といった感じでとりあえずブックマークレットの使用は全く想定に入れてないであろう仕様となっている。そこを掻い潜ってでも使いたい魅力がブックマークレットにはあるよなー。ということでIS01標準ブラウザにブックマークレットを登録する手段を探ってみたらちょっと回りくどい方法ですが見つけました。

  1. IS01本体のに「ブックマーク I/O」をインストール
  2. PC上またはIS01本体のテキストエディタでHTML形式のブックマークファイルを作成
  3. SDカードに作成したブックマークファイルをコピー or 「ブックマーク I/O」のサーバーにアップロード
  4. IS01本体の「ブックマーク I/O」を使用してIS01本体にインポート

といった4ステップでIS01の標準ブラウザにブックマークレットを登録できます。

ちなみにブックマークファイルのフォーマットはこんな感じ。赤字の部分をお好みで改変して使ってください。ファイルの文字コードは「UTF-8 (BOM無し)」、改行コードは「CR + LF」で動作を確認していますほかも行けるのかな…

ブックマークファイルのフォーマット

<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
     It will be read and overwritten.
     DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
    <DT><H3 ADD_DATE="0" LAST_MODIFIED="1306625307" PERSONAL_TOOLBAR_FOLDER="true">ブックマーク バー</H3>
    <DL><p>
    </DL><p>
    <DT><A HREF="ブックマークレットのURL" ADD_DATE="1306625307">ブックマークレットのタイトル</A>
</DL><p>

「ブックマーク I/O」はこちらより入手可能です。

ブックマーク I/O無料

他のAndroidの機種で、標準ブラウザが同じような使用である場合もこの方法が使えるかもしれませんねー。標準ブラウザだけでなく端末に登録したブックマークを使用するブラウザアプリならこの方法で行けるみたいです。ブックマークレットのようなライトな処理は携帯端末にもってこいですね~

カテゴリー: Tips | タグ: , , | コメントをどうぞ

Javascriptで特定の要素のクリック・マウス関連イベントをごっそり無効にする方法

シークバーでページを切り替える仕組みを作っていて壁にぶち当たりました。シークバーのボタンを画像にしていたんですが、ボタンをドラッグするとブラウザの画像をドラッグすると起きるイベントのほうが優先されてしまい、狙った動作が起こせませんでした。対応策としては、

  • 透明な要素でボタン全体をカバーしてブラウザの画像ドラッグイベントをさける
  • Javascript側で対処する

という2点を思いつきました。シークバーの仕組み自体をJavascriptで作成しているので当然後者がスマートだと思い、方法を探ってみた結果です。

画像部分がうまくドラッグできないサンプルのリンクはこちら→ http://t87r.web.fc2.com/Wordpress/Drag/sample.html#ex2

このサンプルはドラッグで動かしたい要素「div2」にwindowのonloadで以下の関数を実行します。div2にはCSSで「position:absolute;」が指定してあります。

1. ドラッグで移動する要素に対する処理

function init2(){
    var div2 = document.getElementById("div2");
    var MousePosInDiv2 = {};

    var DragEvent = function(e){
        var NewMousePos = getMousePosition(e);
        div2.style.left = NewMousePos.x - MousePosInDiv2.x;
        div2.style.top = NewMousePos.y - MousePosInDiv2.y;
        MousePos = NewMousePos;
    }

    var addDragEvent = function(e){
        addEvent(window.document, "mousemove", DragEvent);
        addEvent(window.document, "mouseup", removeDragEvent);
        MousePosInDiv2.x = getMousePosition(e).x - div2.offsetLeft;
        MousePosInDiv2.y = getMousePosition(e).y - div2.offsetTop;
    }

    var removeDragEvent = function(e){
        removeEvent(window.document, "mousemove", DragEvent);
        removeEvent(window.document, "mouseup", removeDragEvent);
    }

    addEvent(div2, "mousedown", addDragEvent);
}

画像の外側の部分は問題なく動作しますが、画像部分は先述の通りブラウザの画像をドラッグしたときの挙動が優先されています。IE・Firefox・Safari・Opera・Chromeの投稿時点の最新版全てで同じ症状が出ています。これを解決するには、画像要素のマウス関連イベントを部分的に取り払ってしまうことでした。つまり以下の6つのイベントハンドラに対して「return false;」してやればいいのです。

  • onmousedown
  • onmouseup
  • onmouseover
  • ondrag
  • ondragstart
  • ondragend

この処理を関数にすると、以下のようになります。

2. 6つのイベントハンドラに対して「return false;」とする関数

function disableClickEvent(element){
	element.onmousedown = function (){return false;};
	element.onmouseup = function (){return false;};
	element.onmouseover = function (){return false;};
	element.ondrag = function (){return false;};
	element.ondragstart = function (){return false;};
	element.ondragend = function (){return false;};
}

関数実行時、引数にelementを渡してやるとブラウザによる画像ドラッグ時のイベントを回避できます。

実際に正常に動作しているサンプルはこちら→http://t87r.web.fc2.com/Wordpress/Drag/sample.html#ex3

画像部分をドラッグしてもちゃんと親要素のDivが移動するようになりました。これで、ユーザーのドラッグ操作で要素を移動する仕組みを作るときに、要素内に画像を心置きなく使えます。

ちなみにドラッグで移動するというわけでもない通常の画像にこの処理をしてやるとこうなります→http://t87r.web.fc2.com/Wordpress/Drag/sample.html#ex4

でも使用機会あんま無さそう。覚えとく必要はないな…

カテゴリー: Web Design | タグ: , | コメントをどうぞ

シェファーズパイ

image

シェファーズパイというイギリス伝統料理をご存じでしょうか。挽き肉・野菜のみじん切りを炒めてケチャップ・ソース・ハーブ・塩コショウで味を整え、マッシュポテトを被せて表面がこんがりと色付くまでオーブンで加熱するというものです。シンプルながらなかなかおいしい。お肉とジャガイモというのはなかなか相性がいい。本来は羊の肉を用いるそうです。しかし手に入りにくいので牛ミンチや合挽ミンチを使用したレシピがよく見られます。
イギリスと言えば料理が美味しくないという噂を聞いたりしますが、実際のところどうなんでしょう…このシェファーズパイを食べる限りそうとも言い切れないと思います。
よなよなエールというおいしいビールがあって、それを更に美味しく飲めるつまみを追い求め、このシェファーズパイにを見つけました。作る手間がビールを更においしいものに変えてくれる、そんな食べ物です。

カテゴリー: Uncategorized | タグ: , | コメントをどうぞ

Google App Engineをさわってみる

最近Google App Engineに手を出してみました。Googleが提供する強力なインフラと、Webアプリのフレームによってサーバー管理やサーバーサイドプログラムの十分な知識がなくともWebアプリを構築できる素晴らしいサービスですね~。現状、Google App Engine + PythonでEclipse上で開発環境を整えて、色々と実験をしています。

主にSamples for Google App Engine – Google Project HostingにあるGuestbookをもとに、

  1. Googleアカウントでログインしてアプリケーション上での独自スクリーンネームを設定する
  2. 各投稿にタグをつけてタグの付いた記事一覧を表示する
  3. 投稿するとき、内容から自動的にタグの候補を取得する
  4. 人気のタグを取得する
  5. ページング処理
  6. 投稿内容を全文検索可能にする

といった内容に着手しています。1, 2,5に関しては簡単に導入できたんですがその他は結構難しい…

にしてもローカルの開発用サーバーとかその他もろもろ…簡単に開発環境が出来上がる。プログラミングの敷居が下がってるんかな~と思う。実際ドキュメントとにらみ合いながらとはいえ僕のような素人でも遊べるんだから!

もし実際Webアプリをリリースするとなればセキュリティとか個人情報の管理とか利用規約とかいろいろ考えなきゃな~と無駄な妄想を楽しんでいます。

カテゴリー: Web Design | タグ: , , | コメントをどうぞ

Googleサイト内検索をよりスムーズに行うブックマークレット(And More…)

古い記事ですがライフハッカー[日本版]にこんな記事があった。

今のところベストなサイト内検索の方法は、やっぱりこれだ : ライフハッカー[日本版]より引用:

本当はあってはならぬことなのですが、やっぱり埋め込みのサーチボックスはいつも完璧にすべての記事をさらってくれるわけではないようですね。うーむ、どうしたものか。そこで、同じ問題を抱える米Lifehackerでは記者のAdam Pash氏が「現状ベストなサイト内検索の方法」というのを紹介しています。その方法とはGoogleの「site:」検索を使うこと。

そしてその記事の末尾で紹介されていたMilly’s BookmarkletsのGoogleの項にて公開されているブックマークレットの使い勝手が非常にいい。コードとしてはたったの3行で、シンプルかつ軽快に動作する。ブックマークレットなので本来1行のコードであるが、改行とスペースを入れてコードを掲載する。

Milly’s BookmarkletsのGoogleの項掲載のブックマークレットを整形したコード

q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text);
if(!q) q = prompt("Search%20terms%20[leave%20selection%20and%20box%20blank%20to%20list%20all%20pages]%20...").replace(/\s\+/g,"%252B");
if(q! = null) location = "http://www.google.com/search?q=" + q.replace(/\s+/g,"+") + "+site:" + location.hostname;
  • 1行目: ページ内のテキスト選択範囲から検索クエリ作成。非選択ならばクエリはnullに。
  • 2行目: クエリがnullならばクエリ入力を求めるプロンプトを表示。
  • 3行目: クエリがnullでなければクエリに基づく閲覧中のサイトのサイト内検索結果のページへ遷移。

といった仕組み。これでテキスト選択状態でブックマークレットを実行すると選択テキストについてサイト内検索を行い、何も選択せずブックマークレットを実行するとサイト内検索を行う単語の入力ダイアログが表示されるという仕組みになっている。非常に簡単でスピーディーにサイト内検索が行える上、(これは少し余談だが、)この記事を書いている今現在僕はFirefox4.0.1を利用しているのだけれど、Firefox4.0.1でprompt()によって表示されるダイアログのインターフェースがとても気に入っているのでがんがん使いたくなってしまうブックマークレットである。

しかし、個人的には2つの改良点を思いついた。それは「どのドメインに対して検索を行うかをダイアログ上に明記したい」ということと「検索結果を新規タブで開きたい」ということである。それぞれの改良を施したコードが以下のものである。改良点ごとに色分けして、改行とスペースを入れてコードを掲載する。

改良後のコード

q = "" + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text);
if(!q) q = prompt("Search%20on%20[" + location.hostname + "]").replace(/\s\+/g,"%252B");
if(q! = null) window.open("http://www.google.com/search?q="+q.replace(/\s+/g,"+")+"+site:"+location.hostname);
  • prompt()の第一引数である表示されるメッセージの部分を変更
  • クエリがある場合、locationでページを遷移するのでなくwindow.open(“開くページのURL”)で新規タブに開く

という改良を行った。これで求める動作を得ることができた。さらにこのブックマークはURLにクエリを付加する形で検索を行うすべての検索エンジンに適応可能であり、コード末尾のwindow.open()の第一引数に指定するURLを工夫することでお好みの検索メニューを作るのは簡単である。特に今回はGoogle画像検索・Google翻訳(和→英)・Google翻訳(英→和)・Google Maps検索でのブックマークレットをあわせて作成したので最後に紹介する。

それぞれ利用する場合は、新規ブックマークレット作成しURL欄に下記コードを貼り付ける事で使用できます。

Google Site Search (改良版)のコード

javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Search%20on%20["+location.hostname+"]").replace(/\s\+/g,"%252B");if(q!=null)window.open("http://www.google.com/search?q="+q.replace(/\s+/g,"+")+"+site:"+location.hostname);void(0);

Google Image Search Bookmarkletのコード

javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Google%20Image%20Search").replace(/\s\+/g,"%252B");if(q!=null)window.open("http://www.google.co.jp/images?rls=ig&hl=ja&source=imghp&biw=1151&bih=600&q="+q.replace(/\s+/g,"+"));void(0);

Google Translate [Japanese-English] Bookmarkletのコード

javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Google%20Translate%20[Japanese-English]").replace(/\s\+/g,"%252B");if(q!=null)window.open("http://translate.google.co.jp/#ja|en|"+q.replace(/\s+/g,"+"));void(0);

Google Translate [English-Japanese] Bookmarkletのコード

javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Google%20Translate%20[English-Japanese]").replace(/\s\+/g,"%252B");if(q!=null)window.open("http://translate.google.co.jp/#en|ja|"+q.replace(/\s+/g,"+"));void(0);

Google Maps Search Bookmarkletのコード

javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Google%20Maps%20Search").replace(/\s\+/g,"%252B");if(q!=null)window.open("http://maps.google.co.jp/maps?q="+q.replace(/\s+/g,"+"));void(0);

動作はすべて同じで、テキスト選択状態ならそのまま選択部分をキーワードに新規タブで検索結果を開き、選択状態でなければ入力ダイアログが表示され入力後に新規タブで検索結果が開かれる仕組みです。Firefox 4.0.1, Google Chrome 11.0.696.65, Opera 11.10で正常に動作することを確認しました。

カテゴリー: Uncategorized | タグ: , , | コメントをどうぞ

WinRollでサブウィンドウの出るアプリケーションでの作業を快適に

WinRollというアプリケーションがすごく便利!

Windowsでウインドウシェードを実現する『WinRoll』(無料) : ライフハッカー[日本版]より引用:

軽いユーティリティ『WinRoll』。各ウィンドウのタイトルバーを右クリックすることで、そのウィンドウをタイトルバーのみに縮小することができちゃいます。昔のMac OSのウインドウシェードが思い出されますね。

WinRollの紹介記事を見ていると、単純にウィンドウ管理に使えるよって事ばかりが目につきますが、より便利に使いこなせる場面があります。それはサブウィンドウを用いるアプリケーションと合わせて使う場合。

続きを読む

カテゴリー: Free Soft | コメントをどうぞ