Home > programming Archive

programming Archive

PHPでTwitterのOAuth認証

今年の一月に、LogTwitと言うTwitterネイティブWebアクセス解析LogTwitをリリースしたのですが、1月の時点では何も考えずにBasic認証を使っていました。(リリース時のブログエントリ

ところが8月末からBasic認証が使えなくなってしまうということなので、現在、twitteroauthというライブラリを使いOAuth認証に対応させる作業をしています。ちなみに、利用したtwitteroauthのバージョンは0.0.2-beta3でした。

Continue reading

PHPでヒートマップを生成する

自分専用Webアクセス解析を作っていると、ヒートマップ画像を生成したくなる時ありますよね。PHPでは簡単に画像を生成することが出来るので、色の設定さえやってしまえば、お手軽にヒートマップを生成することが出来ます。

以下、PHPを使ったヒートマップの作り方です。というか、どの言語でも基本的なやり方は同じなので応用できるはず。

Continue reading

ページ読み込み完了前にgBrowserオブジェクトにアクセス出来てしまう

引き続きFirefoxの機能拡張を作ってるんだけど、不思議な現象に遭遇した。

Firefoxを初回に起動したときにはgBrowserが定義されているのに、二度目に起動したときにはgBrowserが未定義となる。このことに気がつかずに、ちょっとハマってしまったのでメモ。

Continue reading

XULでJavaScriptを含むUIをオーバーレイさせるときの注意点

Firefoxの拡張機能を作る時、UI部品をオーバーレイすることでFirefoxの画面内にボタンを追加したり、既存のUIにスクリプトを追加したりすることができる。

で、さっきブラウザのBackとForwardの隣にあるボタン、back-forward-dropmarker(下記の画像のように、押下するとこれまでのページ遷移履歴のリストが出てくる。)に対して操作したときに、スクリプトを実行させようと思ってXULのオーバレイを作っていたんですが、どうにもうまくいかない。具体的には、XUL内に書いたJavaScriptが実行されていない。

image

で、なんでかなーと思って悩んでたんですが、無事に解決したのでメモ。

最初に書いていたオーバレイさせるコードはこんな感じ。

<toolbarbutton id="back-forward-dropmarker" type="menu" chromedir="ltr"
      disabled="true" tooltiptext="最近表示したページ"
      onbroadcast="if (this.disabled) this.disabled =
      document.getElementById('Browser:Back').hasAttribute('disabled') &&
      document.getElementById('Browser:Forward').hasAttribute('disabled');">

でも、これじゃぁ、上手く実行されない。なんでだろう?と考えてみたところ、もしかしたら&がエスケープされてないんじゃないか?という考えに行きつきました。

通常、HTMLのなかで&のような特殊文字を書くときって、&amp;って書かないといけないんですよね。というわけで、上記のコードを下記のように書き換えてみたら、上手く動きました。

<toolbarbutton id="back-forward-dropmarker" type="menu" chromedir="ltr"
     disabled="true" tooltiptext="最近表示したページ"
     onclick="wt.my_func('list');"
      onbroadcast="if (this.disabled) this.disabled =
      document.getElementById('Browser:Back').hasAttribute('disabled') &amp;&amp;
      document.getElementById('Browser:Forward').hasAttribute('disabled');">

めでたしめでたし。

.NetのSerialPort.isOpenプロパティが不思議な動作をする

C#でアプリをシリアル通信を行うソフトウェアを作っているのだけれど,良くわからない挙動に出会ったので,メモ.

通常,このようにすれば,アプリからCOM1ポートを開く事が出来る.

serialPort = new System.IO.Ports.SerialPort();
serialPort.BaudRate = 38400;
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort.PortName = “COM1”;
serialPort.Open();

しかし,シリアルポートって言うのは通常,一つのアプリからしか利用することができない.このため,既に他のアプリがシリアルポートを使っていないかを確認する必要があり,このために,isOpen()プロパティがある.普通はこんな感じで使うと,ポートが開いているかどうかを知ることができる.

if(serialPort.isOpen){
    serialPort.Open();
}

ところが,このプロパティの戻り値がおかしい.ちゃんと調べてはいないんだけれど,私の環境ではこんな感じ.

  • 他のアプリ(puttyやpoderosa)からシリアルポートを開いているとき→正常
  • 同じアプリ(アプリの多重起動)からシリアルポートを開いているとき→異常

少し調べても結局原因がわからなかったので,例外処理を使って回避することに.

try
{     serialPort.Open();
}
catch {
     ;
}

例外処理をこういう風に使うのってあまり好きじゃないんだけど,とりあえず回避出来たので一安心.

C#でBitmapの比較

一定時間毎にWebブラウザのウィンドウをキャプチャして,変更の有無を検出するコードを書いていたんだけど,ちょっと引っかかってしまったのでメモ.

最初,BitmapクラスにはGetHashCodeというメンバ関数があるから,ハッシュを取得してそれを比較すれば良いだろう,と簡単に考えていた.ところが,GetHashCodeというのはオブジェクトのハッシュを返す関数であり,画像データのハッシュを返すわけではない.つまり,この関数の返り値を比較しても,画像の内容が等しいか否かを判断することが出来ない.

じゃぁ,1pixelごと比較すれば良いのかと考えたのだけれども,BitmapクラスのGetPixelメソッドって,メチャクチャ遅い.そこで,Bitmapの中身をbyte配列に代入して,そのMD5をとることでハッシュ値を取得し,それを比較することで画像の変更の有無を検出することにした.

以下,具体的なコード.これだけの事なんだけど,思ったよりも時間を取ってしまった・・・.

Continue reading

“人生を書き換える者すらいた。”の迷路問題を解いてみた

今更感はあるのだけれど,気分転換に下記のブログで紹介されてた問題を解いてみた.

人生を書き換える者すらいた。 人材獲得作戦・4 試験問題ほか

かかった時間はたぶん60分ぐらい.アルゴリズム的にはA*アルゴリズムを使えば良いらしいけど,正直なところ,よく知らないので,適当に自分で考えてみた.

基本的な考え方としては,距離1で行ける場所,距離2で行ける場所,距離nで行ける場所を順にピックアップしていき,距離nでゴールまで行けるようになったら,そこから逆に最短となる経路を探す,といった感じ.

コメント欄を見てると30分とかで解いてる人も居るっぽいので,私はまだまだだなぁという感じですね.せっかくなので,ソースコードを公開してみます.あんまり綺麗なコードじゃないので,参考にはしないほうがよいと思うけど.

 

Continue reading

TwitterネイティブWebアクセス解析 LogTwitを作りました.

LogTwit.com という新しいサービスを作ったのでちょっと宣伝.

image

以下,本サービスについて説明します.

Continue reading

PHPからTwitterに投稿する

今さら出遅れた感も満載なんですが,Twitter連携のサービスを作ってみたくなったので,どうやったらTwitterAPIを使えるのか調べてみた.

TwitterからPHPに投稿するためには,色々な方法があるみたいなんだけど,とりあえず手っ取り早い方法として,PEARパッケージのServices_Twitterを利用することにしてみた.

Continue reading

仮想シリアルポートを用いた快適デバッグ環境の構築

PCと他のデバイスを連携させて動作するアプリを開発するのって,実は結構面倒なんです.なので,いかにして効率よく開発するかが至上命題なわけです.

あまりにも不便なので,こんな感じでUSB2シリアルケーブル2本と,クロスのメスーメスシリアルケーブルを使って,簡単な動作確認に使おうかなぁとか思っていました,

image

で,これができるならパソコンの中に仮想的にCOMポートを作ってやって,それ同士で通信させれば良いんじゃないの?ということで,それっぽいソフトがないか探してみたところ,Null-Modem emulator(com0com)というソフトの存在を知りました.

Continue reading

Home > programming Archive

はてなブックマーク
なかのひと


Return to page top