2012年12月21日金曜日

LAN経由でマウス・キーボードを共有するソフト-Synagyが便利 #fb

マウス・キーボードを2台のPC間での共有にサンワサプライのKB-USB-LINK3Mを愛用しています。



これは共有のみならず、ドラッグアンドドロップでのファイルコピーもできる優れもので、
かなり気に入っています。

普段は2台のPCを使っているのでこれでいいのですが、たまにもう1台動画編集などで
使っているデスクトップ機を使う時があって、ついついこの感覚でポインタを移動して
あれ、っということになってしまいます。
たまにしか使わないし、KB-USB-LINK3Mをもう1セット買ったとしても同時に2組つかえるのか?
という問題もあるのでなんだか残念に思っていたのですが、ふとSynergyというソフトが
あることに気づきました。

Synergy
http://synergy-foss.org/ja/

早速インストールしてみましたが、設定も簡単です。
ディスプレイの位置関係もドラッグで調整可能で、遅延とかもありません。
マウス・キーボードの共有とクリップボードの共有もできるようです。

ファイルコピーまでは必要ないという場合はこれで十分かも。
MacとかLinuxなんかにも対応しているようです。

フリーソフトですし、オススメです。

NASをバッファローLS-V2.0TLJに変更 #fb

仕事のファイルや画像・ビデオなどのバックアップにNASを使用しています。
2,3年前に買ったアイオーデータのHDL-S1.5という1.5TBのディスクだったのですが、
とにかく遅い。

全てにおいて遅いのです。

ファイルの書き出し読み出し、NASの機能のDLNA・・・とにかくどの機能も遅く、
期待通りの動作をしてくれませんでした。
DLNAでPS3で動画鑑賞とかいう構想もあったのにほとんど使い物にならず・・・
音楽ファイルもファイル数が多すぎてタイムアウトになったりとか。

それでも一応バックアップには使えるので我慢して使っていたのですが、もうぼちぼち
買い換えるかということで、次はバッファローにしました。
アイオーの新機種も調べたのですが、ソフトは同じような感じでどうも信用がおけないので。
ファイル数が多すぎるとダメとかありそうだし。。

まあ、バッファローもはっきりいって安かろう悪かろう的な勝手なイメージがあるので
どうかと思ったのですが他にこれというものもなく。
ネットでの複数機種での比較記事を見たところそこそこ行けそうだったのが決め手でした。
で決めたのがこれ。LS-V2.0TLJ。



黒だし、NASを置くところには色合い的にマッチします。目立たないのがいい。

早速設定して見ての印象は、設定画面が軽い!まあ、UIは微妙だけど。
アイオーのは保存とかあまりにも遅くてイライラするほどでしたが、そういうのはなく
イイカンジです。

ファイルコピーですが、これも速い!
小さいファイルが多い場合でも、大きいファイルの場合でもなかなかのスピードで
コピーできます。
ちなみに、うちのLANはギガビットになってます。

あと、DLNAもちゃんと動作して、以前は見れなかった動画もPS3で軽く視聴可能。
ファイルの表示も早いです。
音楽ファイルもかなり多いのですが少しは時間がかかるものの全ファイル表示も
ちゃんとできてもちろん再生も可能です。

いやー、快適快適!
こんな事ならさっさと見切りをつけて買い換えるべきでした・・・

あとおまけでインターネット経由でアクセスできる機能なんかもあります。
設定もそれほど難しくありませんでした。
UPnP対応の最近のルータならまず問題ないでしょう。
いざというときに使えそうです。

耐久性などはこれからですが、交換用のファンがあったりとか、それなりによくでき
てると思います。
バッファローを見直しました。

2012年11月6日火曜日

Skype4COM+ASP.NET+IIS6.0でSMS送信の際のIIS設定

今開発しているスマホサイトでSMS認証を追加することになりました。
色々サービスを検討しましたが、スカイプが月額料なしで1通8円前後ぐらいと
そこそこリーズナブルなので、スカイプを使うことにしました。

スカイプは「Skype4COM」というCOMコンポーネントを使うことで
スカイプクライアントをプログラムから使うことができます。
これをASP.NET(VB.NET)から使いますが、簡単にできてしまいますので
コードなどは割愛。
スカイプのデベロッパーサイトなどを参照してください。
COMのDLL自体は通常のスカイプクライアントをインストールすると
同時にインストール・登録されるようです。

ローカルでVisutalStudioの開発用WEBサーバでテストしていたときは何の問題も
なく、WebからSMSが送信できていました。
しかし、いざサーバのIISでやってみるとどうもうまくいかない。
タスクマネージャーを確認してみると、ログオンしているデスクトップ上の
クライアントとは別プロセスでスカイプが立ち上がってしまうようです。
ということで、いろいろやって解決した設定メモ。

各動作・実行・開発環境は以下です。

Windows 2003 Server sp2 (IIS 6.0)
.NET Framework 2.0
スカイプバージョン6
VisualStudio 2010

ローカルの開発Webだと問題なくSMS送信できていることが前提です。
以下の手順でスカイプからブラウザ経由でSMS送信できるようになりました。
なお、アカウントのユーザ権利をいじったりしますので、思わぬセキュリティの穴を
作ってしまうことも考えられます。
設定はよく検討してください。


1.サーバーのローカルでログオン
 僕の場合、Administratorでログオンしています。
 これ結構重要で、 リモートデスクトップでのログオンではダメです。
 必ずローカルでログオンします。

2.スカイプのインストール、ログイン(普通に)

3.IIS Admin Serviceのログオンタブで、デスクトップとの対話をサービスに許可をチェック
 world wide web~サービスもチェックしたほうがいいかも?
 いろいろやっててこれもチェック入ってますが、動かなければチェックで。

Clipboard01.gif

4.ワーカープロセスの識別IDで選択されているアカウントにローカルログオンを許可する権利を割り当て
 これにたどり着くのに2,3日かかりました。。
 通常はNETWORK SERVICEアカウントになってますが、ローカルセキュリティポリシーでこれに
 ローカルログオンを許可するの権利を割り当てます。

Clipboard02.gif

5.開発したASP.NETファイルをIISにコピー・設定など

6.ブラウザからテストします

これで、ローカルで実行しているスカイプクライアント経由でSMS送信されます。
僕はSMS送信しましたが、他の操作もできると思います。

難点は、サーバーの再起動などした場合、必ずローカルログオンしてないとスカイプから
送信できないということですね。
スカイプクライアントが実行されてない場合は実行するようにコードは書いてみたのですが、
バックグラウンドで実行されてしまうと上手くスカイプは動かないようです。
自動ログインとかがうまくいかないのかも?

あと、初めてCOMを使う場合、スカイプクライアントが連携を許可するか聞いてきます。
これを許可しておかないと実行されません。
これはインストール後、初回の実行時のみで以降は大丈夫です。

スカイプ側の仕様変更などで今後変更があるかもしれませんが、現状では
これで動いています。

IIS7以降だとどうなるかは今のところテストしてないです。
現状使ってるサーバが古いのですね。。
Hyper-Vがあるのでおそらくこのままこれを使い続けそうです。。

お役に立てれば幸いです。

2012年8月25日土曜日

ThinkPad T410s ヒートシンクにグリス塗り直し、その後

先日、ThinkPad T410sを分解して、CPU・GPU兼用のヒートシンク/ファンの
グリスを塗り直しました。
その後、同じ環境でしばらく使っての報告です。

まずは、どのような環境で使用していたかというと、

・ThinkPad ミニドックプラスシリーズ3
・ドックのDisplayPortに、Accell UltraAV(K087B-005B)を接続し、UltraAVの
 DVIポートのうちの2つにディスプレイを接続。それぞれ、1920x1200で使用。
・ドックのDVIポートにディスプレイを接続し、1920x1200で使用。
・USBにはキーボード、プリンタなどを接続

ということで、ディスプレイ3台構成で使用していました。
このT410sはスイッチャブルグラフィックモデルなので、ドックのDVIかDisplayPort
に2台までのディスプレイしか接続できないのですが、UltraAVを使用することで、
ThinkPad側から見ると、1920x1200のディスプレイと3840x1200のディスプレイの
2台を接続している形となり、裏技的に3台のディスプレイを使用することができます。

そもそもこの構成がGPUに負荷をかけているとも言えるのですが、仕様上のMAXあたりの
解像度でぎりぎりOKな構成だったと思います。


PCの使用用途としては、VisualStudioやSQL Serverを同時に使用してASP.NETの開発を
行ったり、GIMPでの画像作成などもしています。
他にエクセルやら会計処理やらしていますが、それほどPCに負荷がかかるようなこと
ではないと思います。

以前であれば部屋はエアコンをかけつつも、夏は15時前後になると暑くなるためウィンドウ
をたくさん開いて開発などをしていると画面の動きが悪くなったりしていました。
こうなるしきい値がどうやら、GPUの温度が100度を超えたあたりのようでした。
また、この時間以外や通常の使用でもGPU温度は80度を超えることは度々ありました。

それで、グリスを塗り直した後の結果ですが、通常のGPU温度は70度弱程度、気温が
上がる時間帯や画像に負荷がかかるようなことをしても、80度から85度程度までに
収まるようになりました!

グリスを塗り直した時に元々のグリスを見てみましたが、見た感じは劣化したようには
見えませんでしたが、GPUのグリスはシート状だったので、密着度合いが悪かったの
かもしれません。
また、そこそこ性能がよさそうなグリスを選択したので、熱伝導効率がよくなったという
のもあるかもしれませんね。

これ以外に、PCを設置している場所に熱がこもらないようUSBファンを設置しました。
それと、TPFanControlというソフトでファンの回転数制御設定を変えてみました。

CPUとGPUの銅のヒートシンクが一緒にCPUファンに接続されていますが、ファンの制御は
CPUの温度で行われています。

IMG_0377.JPG

なので、GPUだけ温度が上がってもファンの回転数は上がらないみたいです。
実際はつながているのでGPU温度が上がった場合、CPUの方にもある程度は熱が伝わる
ため回転数はある程度は上がる傾向にはあると思います。PCの処理的にもCPUが全く
使われずにGPUだけフル稼働ということはそんなにないとは思います。

とはいえ、今回の構成ではGPUの処理が重めだったので、GPUのみ温度が常に上がり気味
だったようです。
標準のファン制御ではCPU温度のみしか見ていないので、CPUの温度が落ちてもGPUはまだ
熱いということがあるので、CPUの温度を標準より下げ気味になるようなファン制御に
変更しました。
具体的には以下の設定で使っています。

Level=60 0
Level=65 2
Level=67 3
Level=70 5
Level=73 6
Level=76 7
Level=85 64

とりあえず、これでうまくいっています。

T410sの熱問題は、私の使い方の問題が確かに大きいのですが、性能をかなり使い切るような
使い方をする場合は気をつけなければいけないかもしれないですね。

今、ちょっとした事情で別の滞在先でT410sを久しぶりに単体で使っています。
単体だと当然、GPUの温度は全く問題ありません。CPUもです。
ただ、キーボードの左半分はかなり暖かく、左手に汗がじっとりする感じになりますね。
SSDを使用していますが、それでもそれなりの発熱があって、左パームレストも温かいです。

暑さと湿度でPCにとって特に過酷と言われる日本ですが、このブログが多少はお役に
立てれば幸いです。



2012年8月11日土曜日

ThinkPad T410s CPU&GPUにグリス塗り直し

ThinkPad T410s 2901-CTO(スイッチャブルグラフィックス)を普段使っています。
今年の春過ぎぐらいからたまに動作が不安定になっていました。
いろいろ調べたところ、GPUが100度を超えると動きが悪くなって、例えば、ウィンドウの
移動などが重たくなったり、全体的なパフォーマンスが落ちるようです。

それで、USBファンで外から冷やしたり、TPFanControlというソフトでCPUファンの制御を
したりしていたのですが、それでも暑い日にはエアコンをかけていてもGPUが100度を
超えることがたまにありました。
もっとエアコンをガンガンにかければ冷えるんですが、体にも悪いし、電気代もかなり
かかりそうです・・・

ということで、最終手段のヒートシンクを取り外してグリスを塗り直すことにしました。

ThinkPadはハードウェア保守マニュアルが公開されているので、自分で分解することが
できます。とはいえ、、システムボードまでバラすのはかなり大変です。。
しかし、これ以上の手段は思いつかないので思い切ってやってみました。

まずはグリスを近所のケーズデンキで購入。
ainexというメーカーのセラミックグリスをいうのを買いました。
熱伝導率5.1W/m・Kと書いてあります。
何種類かあったのですが、そこそこの感じのものを選びました。

さて、分解です。
バッテリーやDVDドライブ、HDDドライブなどはThinkPadなら簡単に外せます。
メモリ、Wifiモジュール、3Gモジュールなども簡単です。

IMG_0372.JPG

次にキーボードも取り外し。パームレストも外します。
意外と簡単。

IMG_0373.JPG

さらにキーボードが載っていたベゼルも取り外します。

IMG_0374.JPG

さらにLCDも外して、ついにシステムボードが取り外せます。

IMG_0376.JPG

ヒートシンクを外してみるとこのようになっています。

IMG_0377.JPG

上のチップがCPUで、下がGPUのNVIDIA NVS 3100Mのようです。
CPUはグリスのようですが、GPUはシート状のものでした。
グリスは結構はみ出してますし、、なんだか雑な感じですね。。
しかし、CPUの温度上昇はそれほどでもなく、きちんと冷えています。

GPUの方が問題で、ファンからの距離が遠く、銅の熱伝導体もCPUよりも細いので冷却が
いまいちなんでしょうか。。。
気になるのはシート状のグリスですね。綺麗に剥がれたのですが、これが逆に熱伝導効率が
良くない原因かもしれません。

古いグリスをすべてとって、買ってきたセラミックグリスを塗ります。
説明書に米粒大とか書いてあるのですが、、勘でつけます。
ちなみに保守マニュアルには0.2グラムを塗布、と書いていますが、、、
どうやって量ればいいのやら。。

まあ、適当にするしかありません。

今度は逆に取り付けていきます。
かなり組んでからコネクタの接続に気づいたり、、結構時間がかかりつつもなんとか
組みあがりました。

グリスの説明には、最高の性能を発揮するには付着後最低25時間ほどかかると書かれていますが、
とりあえず、動作チェック。
無事起動したので、接続などは問題ないようです。

肝心の温度ですが、前よりも下がっている感じがします!
CPU自体も何もしなくて70度前後あったのが、60度から65度前後で安定しています。
GPUもすぐに80度に到達していましたが、70度前後で安定、作業したり動画を見ても
前よりも安定感はありそうです。

本格的に仕事で使っていないので、実際効果があるのかどうかは来週以降でないとわかりませんが、
とりあえずは動作に支障がなかったのでよかったです。
猛暑日にどうなるかとかも気になりますが、とりあえずしばらく様子見です。

2012年5月18日金曜日

YUI Library(CSS)を使ってみる(gridが便利)

CSSリセットというものを改めて勉強してみていろいろ比較した結果、YUI Libraryを使うことに
しました。Yahoo製で、実際にYahooで使われているようです。
また、一般サイトでも採用しているサイトが多く有るようです。

http://yuilibrary.com/

YUI Libraryはリセットはもちろん、fontなどある程度の基本設定をしてくれたり、divでの
レイアウトを簡単にできたりするオプションがあり、なかなかイージーそうです。
他にもjavascriptやajaxなどのライブラリもあるようですが、jqueryが慣れているので
今回はCSSのみを使用しました。

YUI Libraryを使用するには先ず以下のCSSを指定します。


<link rel="stylesheet" type="text/css"
href="http://yui.yahooapis.com/3.5.1/build/cssreset/cssreset-min.css" />
<link rel="stylesheet" type="text/css"
href="http://yui.yahooapis.com/3.5.1/build/cssfonts/cssfonts-min.css" />
<link rel="stylesheet" type="text/css"
href="http://yui.yahooapis.com/3.5.1/build/cssbase/cssbase-min.css" />
<link rel="stylesheet" type="text/css"
href="http://yui.yahooapis.com/3.5.1/build/cssgrids/grids-min.css" />


ダウンロードも出来ますが、改変などはしないのでURLをそのまま指定しました。
cssgrids以外でブラウザ間の違いをかなり吸収し、すぐに使える状態になっています。

グリッドでは、divを左右に並べるレイアウトを簡単に実装できます。
例えば次のようにすると、左がメニュー、右がメインというようなレイアウトが
簡単に配置できます。


<div class="yui3-g">
<div class="yui3-u-1-4" id="nav">メニューとか</div>
<div class="yui3-u-1-5" id="main">メイン画面</div>
</div>


yui3-gでグリッド全体、その子としてyui3-uから始まるクラスを指定します。
単にyui3-uだと幅は決まっていません。自分で幅をpx指定などします。
例のようにyui3-u-1-4だと全体の幅の1/4の幅となります。
yui3-u-3-4だと3/4です。
他には以下のページに書かれています。
CSS Grids http://yuilibrary.com/yui/docs/cssgrids/

簡単にdivを横並びにできるので、かなり楽です。
特に僕は最近HTMLをがっつりやり始めたのでとても助かります。
floatとか、、、CSS初心者は結構悩むんですよね。


すでに作ったサイトに適用するとなるとさすがに面倒ですが、新規にサイトを
作る場合は利用すると楽だと思います。
よろしければ、どうぞ。

2012年5月9日水曜日

USB-RGB3/D その後。 #fb

USBグラフィックアダプターUSB-RGB3/Dを購入し一月半ほど経ったのですが、
僕の使用状況では具合が悪く、元に戻してしましました。

以前の記事>USB-RGB3/D購入 http://akin.sblo.jp/article/54572924.html

USB-RGB3/D側のディスプレイにFXのチャート画面(ブラウザ)を表示していると
どうもPCに負荷がかかっていって、数時間するとブラウザの動きが悪くなります。
ブラウザはChromeを使っているのですが、ディスプレイアダプターとChromeの
相性的な問題もあるのかも。
とにかくChromeがCPUをだんだん占有するようになってきて全体的なパフォー
マンスが落ち、さらに今日は気温が高かったこともあってCPUあたりが高温に
なって、それもPCを不安定にさせていたようです。

詳しい技術的なことはわからなかったりしますが、以前使っていたUltraVideo
では起こらなかったことですので、僕の環境においてはUSB-RGB3/Dに原因がある
ことは確かだと思います。

USB3.0で、他の環境ならもしかしたら大丈夫なのかもしれません。
せっかく買ったのに残念ですが、お蔵入りですね。。
というか、オークションとかアマゾンで売ってしまったほうがいいかも。

あとこれ以外に、USB-RGB3/Dで不満だった点もあります。
お昼とかに仕事を中断するときスリープしておくのですが、復帰した場合に
ウィンドウが左右で入れ替わってしまいます。
構成は3つのディスプレイで、左から、DVI,DVI,USB-RGB3/Dという構成ですが、
スリープして復帰するたびに、一番左と一番右においていたウィンドウが
入れ替わります。
ドライバとか環境によってならないことがあるかもしれませんが、僕の環境
ではそのようになりました。(ThinkPad T410s)

他に、電源を切って再度立ち上げた時に認識しないことが9割ぐらいの確率で
あります。一度USBを抜いて再度接続すると認識しますが、ちょっと面倒でした。
これもPC環境によるのかも。

ご参考になれば幸いです。





2012年5月8日火曜日

ASP.NETでPayPalのエクスプレスチェックアウトAPI実装

ASP.NET(VB)でPayPalのエクスプレスチェックアウトをAPIを使って実装することに
なりました。
PayPalのサイトを調べたのですが、とにかく資料があちこちに散らばってわかりにくい。
ASP.NET用SDKもあるのですが、.net framework1.1用とか。。
SDKじゃなくてもいけそうなので自分で作成してみました。

エクスプレスチェックアウトは以下のフローになります。
ざっくりとですが、、

��.商品とかの購入画面(用途によります)のPayPal支払いボタンクリック
��.tokenを取得して、PayPalサイトへリダイレクト
��.PayPalサイトで購入情報を確認して、購入ボタンクリック
��.自サイトに戻り、商品金額などの確認画面、支払いボタンクリック
  (このとき、PayPalからAPIで商品情報を取得して表示)
��.支払確定のAPIを呼んでトランザクション終了

��でポップアップして表示するやり方があるみたいなのですが、どうもうまくいかず。。
特にこだわらないので一旦PayPalサイトへ移動する方法です。

まずは1,2のtokenを取得する、SetExpressCheckout APIのところ。
そうそう、PayPalはsandboxというテスト環境を提供しています。
予めsandboxアカウントを作成しておきます。
APIのURLもsandbox環境のものです。


Dim wReq As HttpWebRequest = CType(WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp"),
HttpWebRequest)
Dim wDataStr As String
Dim wData As Byte()
Dim wReqStream As Stream

Dim wRes As WebResponse
Dim wResStream As Stream
Dim wSr As StreamReader
Dim wResData As String
Dim wResArrData As String()
Dim wResHt As Hashtable

Dim wCt As Integer

wDataStr = "&METHOD=SetExpressCheckout" _
& "&USER=userid" _
& "&PWD=password" _
& "&SIGNATURE=signature" _
& "&VERSION=64" _
& "&PAYMENTACTION=Sale" _
& "&RETURNURL=http://localhost:58119/TestPaypal/return.aspx" _
& "&CANCELURL=" & HttpUtility.UrlEncode("http://localhost:58119/TestPaypal/kakunin.aspx
?amt=" & Request.QueryString("amt") & "&desc=" & Request.QueryString("desc")) _
& "&PAYMENTREQUEST_0_CURRENCYCODE=JPY" _
& "&PAYMENTREQUEST_0_AMT=" & Request.QueryString("amt") _
& "&PAYMENTREQUEST_0_DESC=" & HttpUtility.UrlEncode(Request.QueryString("desc"))
wData = Encoding.ASCII.GetBytes(wDataStr)

With wReq
.Method = "POST"
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = wData.Length
End With
wReqStream = wReq.GetRequestStream()
wReqStream.Write(wData, 0, wData.Length)
wReqStream.Close()

wRes = wReq.GetResponse()
wResStream = wRes.GetResponseStream()
wSr = New StreamReader(wResStream)
wResData = wSr.ReadToEnd()
wSr.Close()
wResStream.Close()

'&で分割
wResArrData = wResData.Split(New Char() {"&", "="})

'ハッシュテーブルに読み込み
wResHt = New Hashtable
For wCt = 0 To wResArrData.Length - 1 Step 2
wResHt(wResArrData(wCt)) = wResArrData(wCt + 1)
Next

If wResHt("ACK") = "Success" Then
Response.Redirect("https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token="
& wResHt("TOKEN"))
Else
ltrMsg.Text = "err:" & wResData
End If


次に4の戻ってきた時のGetExpressCheckoutDetails APIの部分。
確認画面に表示する情報などを取得。
そういえば、戻ってきた時にquerystringでtokenとPayerIDが付加されています。



Dim wReq As HttpWebRequest = CType(WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp"),
HttpWebRequest)
Dim wDataStr As String
Dim wData As Byte()
Dim wReqStream As Stream

Dim wRes As WebResponse
Dim wResStream As Stream
Dim wSr As StreamReader
Dim wResData As String
Dim wResArrData As String()
Dim wResHt As Hashtable

Dim wCt As Integer

wDataStr = "&METHOD=GetExpressCheckoutDetails" _
& "&USER=userid" _
& "&PWD=password" _
& "&SIGNATURE=signature" _
& "&VERSION=64" _
& "&TOKEN=" & Request.QueryString("token")
wData = Encoding.ASCII.GetBytes(wDataStr)

With wReq
.Method = "POST"
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = wData.Length
End With
wReqStream = wReq.GetRequestStream()
wReqStream.Write(wData, 0, wData.Length)
wReqStream.Close()

wRes = wReq.GetResponse()
wResStream = wRes.GetResponseStream()
wSr = New StreamReader(wResStream)
wResData = wSr.ReadToEnd()
wSr.Close()
wResStream.Close()

'&で分割
wResArrData = wResData.Split(New Char() {"&", "="})

'ハッシュテーブルに読み込み
wResHt = New Hashtable
For wCt = 0 To wResArrData.Length - 1 Step 2
wResHt(wResArrData(wCt)) = wResArrData(wCt + 1)
Next

ltrGetEC.Text = wResData
ltrAmt.Text = wResHt("PAYMENTREQUEST_0_AMT")
ltrCur.Text = wResHt("PAYMENTREQUEST_0_CURRENCYCODE")


最後に4,5の支払確定する部分、DoExpressCheckoutPayment APIのところです。


Dim wReq As HttpWebRequest = CType(WebRequest.Create("https://api-3t.sandbox.paypal.com/nvp"),
HttpWebRequest)
Dim wDataStr As String
Dim wData As Byte()
Dim wReqStream As Stream

Dim wRes As WebResponse
Dim wResStream As Stream
Dim wSr As StreamReader
Dim wResData As String

wDataStr = "&METHOD=DoExpressCheckoutPayment" _
& "&USER=userid" _
& "&PWD=password" _
& "&SIGNATURE=signature" _
& "&VERSION=64" _
& "&PAYMENTACTION=Sale" _
& "&TOKEN=" & Request.QueryString("token") _
& "&PAYERID=" & Request.QueryString("PayerID") _
& "&PAYMENTREQUEST_0_CURRENCYCODE=" & ltrCur.Text _
& "&PAYMENTREQUEST_0_AMT=" & ltrAmt.Text
wData = Encoding.ASCII.GetBytes(wDataStr)


With wReq
.Method = "POST"
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = wData.Length
End With
wReqStream = wReq.GetRequestStream()
wReqStream.Write(wData, 0, wData.Length)
wReqStream.Close()

wRes = wReq.GetResponse()
wResStream = wRes.GetResponseStream()
wSr = New StreamReader(wResStream)
wResData = wSr.ReadToEnd()
wSr.Close()
wResStream.Close()

ltrDoEC.Text = wResData


とりあえず、これでうまく行ってます。
書き方の良し悪しはあると思いますが、、、他に良い方法があれば教えて下さい。。

あと、SetExpressCheckoutで商品情報をもっとちゃんと入れてやると、PayPalサイトで
商品情報の詳細が出そうな感じです。
このコードのままだとPAYMENTREQUEST_0_DESCで設定した情報しか表示されません。。


2012年4月24日火曜日

CSSのfont指定時のline-height #fb

CSSでfontでまとめて指定するときのline-heightの書き方ですが、
ちょっとはまったのでメモ。

始め、順番に並べればいいと思っていたので以下のように書いていました。
body {font:bold 20px 200% sans-serif;}

空白で区切ってサイズの後に記述していたのですが、どうも反映されない。。。
それもそのはず、font-size/line-heightとスラッシュで区切るようです。
いかが正解。

body {font:bold 20px/200% sans-serif;}

スラッシュで区切る形式は今まで出会っていなかったのでハマりました。。

一度経験するとどうってことないんですけどね。
ということで、メモ。

2012年4月23日月曜日

Booki.shに津田マガepubをアップする場合、気をつけること

先日紹介したクラウド型のepubリーダーサービスBooki.sh。
端末を気にせずに、続きから読めるのは非常に快適です。

僕は主に津田さんのメルマガ-津田大介の【メディアの現場】を読んでいるのですが、
なぜか2ファイル以上、津田マガがアップできない。
例えば今Vol.30を読んでいますが、その状態で前の号の29はアップできません。
仕方なく一旦読んだら削除してアップという対応をしていましたが、なんだか
面倒です。読みきれなかった場合でもとりあえず次の号をアップしておきたいし。

で、なぜアップできないのか調査していたのですが、どうやら津田マガはepubの
ユニークIDが毎号同じようで、Booki.shはユニークIDが同じだから同じファイルと
みなすためにアップができない様子。
同じファイルを幾つもアップしても無駄なのでシステム的には確かに間違っては
いない気もするけど、他のepubリーダーだとそんなこともないし、、、
その辺の詳しい仕様はわからないですが、どっちが正しい動きなんでしょうか?

ということで、ユニークIDを修正してepubを作成し直します。
手順は以下のとおり。

��.epubはzipで圧縮されているので、拡張子をepubからzipに変更
��.zip内のOEBPSフォルダ内のcontent.opfのdc:creatorタグを以下のように変更
<dc:identifier id="BookId">tsudamag20120411_vol29</dc:identifier>

  例としてVol.29の場合です。一意なIDになるようにしないといけないと思いますが、
  とりあえずこれでいけるんじゃないでしょうか。。
��.同じフォルダのtoc.ncxのmeta name="dtb:uid"タグ内のcontentを上のIDと同じに変更
��.変更したファイルを差し替えてzip圧縮後、拡張子をepubに変更

これでBooki.shに無事アップロードできるようになりました。
もし困っている方は試してみてください。

2012年4月19日木曜日

[javascript] jqueryを使って文字列をふんわり点滅

jqueryを使用してふわっと文字を点滅させる方法です。

$(function(){
setInterval(function(){
$('#id').fadeOut(500,function(){$(this).fadeIn(500)});
},1500);
});


fadeOutで500ミリ秒で徐々に文字が消えます。
その後fadeInが呼ばれて500ミリ秒で文字が出てきます。
これを1500ミリ秒ごとに実行しているのが、setIntervalです。

時間を適当に変更して使用してみてください。

[javascript] jQuery.ajaxで同期通信

ajaxといえば非同期通信ですが、単にデータ取得するだけでも便利なので同期通信でも
使用してみました。
jQuery.ajaxで同期通信する場合のメモです。

そもそも最初は非同期とか意識してなくて、以下のようにやろうとしてました。

var hoge = 0;
$.getJSON("json.js", {"pram1":"a","param2":"b"}, function(data,status){
hoge = data.key1;
});


hogeを外部で使用しようとしても値が入っていない。
変数スコープの問題もあるのですが、そもそも非同期通信なのでこういう書き方自体
まずいということが分わかりました。

なので、jQuery.ajaxを使用して同期通信に変更。

var retText = $.ajax({url: "json.js", data: {"param":"1", ,"param2":"b"}, async: false});


「async: false」で同期通信になります。
jQuery.ajaxはXMLHttpRequestを返します。
retText.responseTextにはjson形式のテキストが入っているのですがjsonと理解されずにそのまま
テキストなので、定義し直します。

eval("var retData=" + retText.responseText);


これでjsonとして認識されるので、retData.key1とかで使用できます。

2012年4月16日月曜日

クラウド型電子書籍ライブラリ Booki.sh

最近、メルマガなどでepub形式の電子書籍を読むことが増えました。
epubリーダーで一番有名なのはやっぱりiBookです。
iPhone、iPadなどのフリーアプリで、pdf,epubなどに対応しています。
既読位置を同期してくれて、これがかなり便利だったりします。

例えば、家ではiPadで途中まで、外出時にはiPhoneで続きからなどという
使い方ができます。

ただ、PCとは同期できないんですよね。
僕の場合、日中の殆どでPCを使用しているので、PCで読めて更に同期
できるようなものを探していました。

アプリではさすがに見つからず、以前はMagicScrollというクラウド型の
サービスを使っていました。
http://www.magicscroll.net

epubファイルをアップロードして、ブラウザから閲覧します。
ただ、一度リニューアルされてからiPhoneでうまく動作しなくなったんですよね。
それで使わなくなってしまいました。


それから数ヶ月。
とあるページでBooki.shというサイトを見つけました。
https://booki.sh/

これもMagicScrollと同じようにepubファイルをアップしてブラウザから閲覧します。
他にもWebで電子書籍を購入することもできるようですが、、、日本語の書籍は
あまりなさそうです。

ここはiPhone/iPadでもばっちり動作。当然PCでも動作します。
さらに、一度ダウンロードするとオフラインでも読めるようです。
実際に試したことはないのですが、なかなか良くできたサイトですね。
HTML5とかで作ってるのかな?

安定もしているようで、特に問題があったことはありません。
あと、肝心の既読位置の同期もバッチリです。
PCで途中まで読んで、iPhoneで開くとPCで読んだ既読位置までページを移動するかどうか
聞いてきます。
「GO THERE」(だったと思う)ボタンクリックで既読位置まで移動します。

epubを複数のデバイスで読むことがある方にはオススメです!


2012年3月22日木曜日

[enchant.js] 今までのサンプル

jsdo.itに登録したサンプルを公開しておきます。

スロットみたいに回転するやつ
http://jsdo.it/anagaoka/5pWv

画像ボタン、オンマウスで切り替え
http://jsdo.it/anagaoka/test_button

こんな感じで。

USB-RGB3/D購入

IOデータのUSBグラフィックアダプター USB-RGB3/Dを購入しました。
http://www.iodata.jp/product/av/ga/usb-rgb3d/

今まではACCELL UltraVideo DisplayPort to DVI Multi-Monitor Adapter
というDisplayPortをDVIx3にできるのを使ってました。
http://www.accellcables.com/products/DisplayPort/DP/dp_dvi_multimonitor.html

これはすぐれもので、PCのグラフィックを使って表示するので遅延もなく動画も
サクサク表示されるのですが、複数のモニタがPC側では1台のモニタと認識される
ので、タスクバーが全画面に表示されてしまいます。

あと、カラーの調整が自動ではいまいちでPC側での調整が必要ですが、スリープして
起動するとその設定が元に戻ってしまいいちいち設定しなおさないといけないという、
かなり面倒な事になっていました。

さらに僕はモニタ2台で使っていましたが、ダイアログは通常画面の真ん中に表示されると
思いますが、2台のモニタが1台のモニタと認識される関係上、2台のモニタの間に
表示される形となってしまってました。

ということでもろもろ面倒になってきたので、USBのグラフィックアダプターを買ったのでした。
以前はUSB2.0対応で、チップもDL-195というものが主流でしたが、最近はDL-3100という
USB3.0対応の更に性能の良いものが出てきてるみたいで、このIOデータのアダプターもそれを
採用しています。

使用しているPCは、ThinkPad T410sでUSB3.0には対応していませんが、USB2.0でも以前より
高速になっているという説明を信じて買ってみました。
構成は、T410sをドックというポートなどを拡張するものに接続していて、2ポートあるDVIに
それぞれモニタを接続、さらにUSB-RGB3/Dに別モニタを接続しています。
合計モニタ3台です。

で、結果としては全く問題なし。

YouTubeで適当な動画を表示してみましたが問題なく表示されます。
解像度が高い動画とかはもしかしたらコマ落ちもあるかもしれませんが、サブディスプレイで
使用するので動画は表示しないため僕の使用状況では問題ありません。

ただ、これはしょうがないかもしれないし前もなってましたが、スリープから復帰した時に
複数ウィンドウをそれぞれのモニタに配置していたのが、配置が変になっていることが
結構あります。
マルチディスプレイ環境は前から使ってますが、これはしょうがないのかも。
特にモニタ3台だと良くなるような気がします。

ともかく、以前の3つの問題は解決したのでよしとしよう。


2012年3月16日金曜日

[enchant.js]画像ボタン

enchant.jsで、画像のボタンの追加。
ラベルにcssクラスを設定して、あとはCSSで記述してます。
どうやらラベルは表示されると<div>になるみたいです。


enchant();
window.onload = function() {
//ゲームオブジェクトの生成
var game = new Game(320, 320);

var buttonStart = new Label();
buttonStart._element.setAttribute('class','button');
buttonStart.width = 90;
buttonStart.addEventListener(Event.TOUCH_START,function(e){
//タッチ時に処理させたいコード記入部分
alert('クリックしました');
});
game.rootScene.addChild(buttonStart);

//ゲームの開始
game.start();
};

あとはCSSでどのようにでもなるので、Javascriptは便利ですね。

enchant.jsでのゲーム作成。スロットみたいにグルグル

enchant.jsでゲーム作成することになりました。
が、わからないことだらけ。
とりあえず作成するゲームに必要なことを勉強中です。

まずは、スロットみたいに数字画像を回転しているように
見せるサンプル。
縦に1,2,1と並べた画像をimage.gifという名前で作成しています。


enchant();
window.onload = function() {
//ゲームオブジェクトの生成
var game = new Game(320, 320);
game.fps = 32;
game.preload ('image.gif');

game.onload = function() {
//サーフェイスの生成
var surface = new Surface(32, 32);
//回転させる数字画像
var numimg = game.assets['image.gif'];

//サーフェイスに1を描画
surface.draw(numimg, 0, 0, 32, 32, 0, 0, 32, 32);

//スプライトの生成
var sprite = new Sprite(32, 32);
sprite.image=surface;
sprite.x = 10;
sprite.y = 10;
game.rootScene.addChild(sprite);

sprite.tick = 0;
sprite.addEventListener(Event.ENTER_FRAME, function() {
sprite.tick += 8;
surface.draw(numimg, 0, sprite.tick, 32, 32, 0, 0, 32, 32);
sprite.image=surface;

if (sprite.tick == 64) {
sprite.tick = 0;
}
console.log("tick:"+sprite.tick);
});

};

//ゲームの開始
game.start();
};


32x32の画像を立てに3つ並べていて、徐々にずらして表示しています。
これが正解なのかどうかはわかりませんが、、、とりあえずやりたかった
ことはこれです。

2012年2月27日月曜日

TweetBot for iPad

TweetBot for iPadでTweet Markerの位置までスライドしないと先日書きましたが、
昨日ためしてみるとあっさりスライドしてくれました・・・
うーん、なんだろう。。

で、iPhone版も使ってるとたまにスライドしてくれない時もあったりして、、、
TweetBot側じゃなくて、Tweet Marker側にも問題があるのかもですね。
データ取得がちょっと遅れたりとか、微妙なタイミングの問題とか。

とはいえ、便利です!
感謝感謝!

2012年2月21日火曜日

やっぱりTweetBot

Tweetingsですが、しばらく使っていたのですが、どうも重い。
重いというか、開いてからtweetをとりに行っているか、Tweet Markerを見に行っているかの
ところでしばらく止まって何も動かなくなります。
しばらく待った所で動き出す、という感じ。
しばらくは我慢して使っていたけど、twitterはさっと開いてさっと確認したいのでかなり
ストレスを感じるようになりました。

というわけで、各所で評判のよさそうなTweetBotに変更。
こちらはとにかくサクサク動く!
操作系もなかなか考えられていて使いやすいと思います。

あまりに使いやすかったのでiPadのほうもTweetBotにしました。
でも、、なぜかiPad版は開いた時にTweet Markerの場所までスライドしてくれません。。
iPhoneの方は開いた時点でTweet Markerの場所までスライドしてくれるのですが。
そのうち改善されることを願います。。

2012年2月14日火曜日

VB.NETでTwitterでxAuthのとき

VB.NETでTwitterに自動投稿するツールを作っていたのですが、xAuthが出来ず、
苦労しました。結局出来なかったのですが、、、顛末メモ。

Tweenの中の人がxAuthのコードを公開してくれていたので、利用させて頂きました。
��大変助かりました!ありがとうございます!)
以下のページ。

きりの日記 OAuth(xAuth)のVB.net実装サンプル
http://d.hatena.ne.jp/Kiri_Feather/20100305

とりあえずこのままコピーして動かしてみましたが、動かず。。
��当然、Consumer keyなどは取得済みです)
いろいろしてみましたが、結局xAuthをするためには、Twitterに申請をしないと
いけないようです。

[参考]
xAuthの申請方法をまとめました
http://blog.elearning.co.jp/archives/8909.php

アプリを公開するならともかく、限られた範囲内でしか使用しないので面倒です。。
英語なので。。

ということで結局、Access tokenなどを取得するプログラムを作って取得し、
それを自動投稿プログラムに設定して使うことにしました。

Access token取得プログラムの流れは、

��.AuthenticatePinFlowRequest でPINコード取得用URLとRequest tokenを取得
��.PINコード取得用URLを開いて取得したPINコードとRequest tokenを使用して、
  AuthenticatePinFlow でAccess tokenなど取得

という感じです。簡単。

このAccess tokenなどを使用すればOAuthで投稿などができるようになります。


2012年1月20日金曜日

Tweetings for Chromeその後。

Tweetings for Chromeですが、Twitterの返信はなく。。

でも、Twitter本家サイトにChromeの拡張機能でPBTweet+とWebMarkerを
いれるとかなり使いやすくなったので、PC側はこれでいいかなと。
Tweetings for iPhoneはTweet Markerに対応してて同期できるし。

ま、たまに同期が変な時もあるにはあるのですが、大分楽になります。

とりあえずはこの構成でしばらく使ってみることにします。

2012年1月18日水曜日

Tweetings導入。でも、、

TwitterクライアントのTweetingsを導入して見ました。
http://www.tweetings.net/

iPhoneクライアントは有料で250円ですが、使い勝手はまあ、普通。
以前はついっぷるを使ってたけど、同等の機能はあります。
名前とアカウント名はどっちかしか表示できないのは残念。

で、目玉はタイムラインの同期機能。
WindowsではChromeの拡張機能のTwitterクライアントが対応しているので
早速導入、、だけどどうも同期してくれない。。

同期機能はTweetings Syncという機能だけど、iPhoneでオンにすると
アプリを閉じて、開くと読んでいたところまでスクロールされているので
iPhone側では記憶されているっぽい。
Chromeではほとんど無反応。オプションのTweetings Syncをチェックする
だけなんだけど動作している様子がない。
そもそも、同期した時の動きがどうなるのかわからない。

マニュアルとかFAQとか説明が圧倒的に不足してるんです。。
ググッていろいろ調べてみたものの、Chromeの同期についてはほどんど
情報がでてこない。。
別マシンで試したり、MacのChromeでも試したけど同期しないのでそもそも
Chrome版はダメなのでは?という気配がしてきた。

で、ググるのは限界なので、Twitterで@tweetings宛てに質問ツイートして
おきました。もちろん英語で。
英語は得意じゃないので通じるかどうか。。


とりあえず今は、iPhone版ではTweet Markerというタイムラインが記憶
できるサービスも選択できるのでそちらを使ってます。
これだとChromeの拡張機能は、Twitterサイトのタイムラインを同期する
感じなのでちょっと使いにくいのです。
もともとSilver Birdを使っていたので、ほぼ同じ機能のTweetings for Chromeが
ちゃんと同期してくれるのがベスト。