ブログパーツのフォントを揃える

これが、flash で作るとブラウザ依存の悩みが減るのでしょうが…ま、ここは javascript オンリーで。

■テキストのフォントを揃える。

ブラウザで見るならば、font-size で pt 単位を使うのでしょうが、パーツ上の固定位置になるので px 単位でも良いかなと思っています。このあたりはデザインを見ながら調節ですね。

■テキストの位置を指定する。

画像に対して相対座標にするために、

position: relative;

で指定した後で、top、left で位置決めをします。

この時、画像→時計の文字→コピーライト文字、の順になるので、top がマイナス値(画像の下辺からの相対位置)になるのが、ミソですね。

あと、テキストの高さを計算にいれてしまうと、位置決めが面倒なのであらかじめ、

line-height: 0px;

にしてしまって、テキストの高さを計算に入れないようにすると便利です。

という訳で、このあたりの対処を入れたのが↓です。

■firefox の innerText/innerContent 対策

どうやら、firefox だけ、innerText が無くて、innerContent を使うそうなので、

function tag$(tagID)
{
 var tagObj = document.getElementById(tagID);
 tagObj.setText = function (srcText) {
  if (navigator.userAgent.indexOf("Firefox") > -1) {
   tagObj.textContent = srcText;
  }else{
   tagObj.innerText = srcText;
  }
 }
 return tagObj;
}

を使います。参照先は↓に。

第五章 クライアントサイドの技術:HTMLへのアクセス方法 – div –

http://www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter05/004/index.html

ただし、jQuery のスクリプトが読み込まれていることが多いので、$ 関数を使わず tag$ という名前に変えています。

まあ、既存の関数名(クラス名)にダブらなければなんでも。

こうしておくと、

tag$(“bijo-clock”).setText( status );

のように呼び出せます。

これで、晴れて IE8 と Firefox で動きましたね(Chromeも)

20101104_06.jpg

カテゴリー: 開発, ブログパーツ | 2件のコメント

ブログパーツで画像の切り替え

デスクトップガジェットと同じように、定期的に画像の切り替えが出来たので確認。

■ユーザーがパーツを貼る

貼るところのコードは、こんな感じ。


<script src="http://moonmile.net/js/bijo.js"></script>

 

普通に、指定された javascript を読み込むだけです。

パラメータを指定する場合は、

  • 外部変数を用意するか、
  • 指定用の関数を用意するか、
  • タグに何か書き込むか、

というところですが、どのパターンでも「パーツを貼りつけるためのフォーム」は必要そうです。上のような1行だけならば、script 部分をコピー&ペーストでもいいんでしょうけど、それ以上を使う側にさせると間違える確率が増えるので、苦情もろもろが多くなるかな、と。

■bijo.js の中身

function bijo()
{
 var style = "<style> #bijolinux {  width: 200px;  height: 250px;  overflow: hidden; } #bijo-clock {  position: relative;  top: -50px;  left: 100px;  font-size: x-small;  color: red; } #bijo-copyright { position: relative;  top: -50px;  left: 80px;  font-size: x-small; } a#bijo-link { color: white; text-decoration:none; outline: none; } a:hover#bijo-link { color: red; } </style>";
 document.write( style );
 document.write("<div id='bijolinux'><div><img id='bijo-image' width='200' height='250' src='http://moonmile.net/images/photo1.png'></div><div id='bijo-clock'>00:00:00</div><div id='bijo-copyright'><a id='bijo-link' target='_blank' href='http://bijo-linux.com'>bijo-linux.com</a></div></div>");
 init();
}

var bijo_sec   = 0;
var bijo_count = 0;

function start_timer()
{
 setInterval( "interval()", 1000 );
}
function interval()
{
 bijo_sec++;
 if ( bijo_sec >= 30 ) {
  bijo_sec = 0;
  bijo_count ++;
  if ( bijo_count >= 4 ) bijo_count = 0;
        var img = document.getElementById("bijo-image");
        img.src = "http://moonmile.net/images/photo"+bijo_count+".png";
 }
 var dd = new Date();
 var hour = dd.getHours();
 var min  = dd.getMinutes();
 var sec  = dd.getSeconds();
 var status = ("00"+hour).slice(-2,4) + ":"
  + ("00"+min).slice(-2,4)+":"+("00"+sec).slice(-2,4);
    var clock = document.getElementById("bijo-clock");
 clock.innerText = status;
}
function init()
{
 var img = document.getElementById("bijo-image");
    img.src = "http://moonmile.net/images/photo0.png";
 interval();
 start_timer();
}
// start
bijo();

何やら、ややこしい感じになっていますが、先頭で、スタイルと必要なタグを document.write で書き込む関数を作っておいて、最後に bijo function を呼び出す、という方式です。

スタイルとタグが、1行になっていますが、製作時には普通に HTML で書いて、後から1行に直しています。なので、ちょっとデザインを変えようと思っても、なかなか大変そうですね…この方法だと。

外部変数は、他のスクリプトとダブる可能性があるので、できるだけ使いたくない…のですが、2か所だけカウンタ用に[bijo_sec」と「bijo_count」を使います。こんな風に長めにしておけば、他とダブりません。もっと正確にするならば、javascript 自体を php で生成して、変数名をタイムスタンプなどからユニークにする、って技があるのですが、まぁ、大抵は大丈夫でしょう。

そんな訳で、実際に貼りつけてみたのが、これです↓

■他のブラウザで確認

ブログパーツですから、IE8以外もチェックしないと、という訳で。

IE8の場合

20101104_03.jpg

Firefox の場合

20101104_04.jpg

Chromeの場合

20101104_05.jpg

な感じです。

どうやら、

  • x-small でのフォントのポイント数がまちまちなので、見え方が駄目。
  • firefox は、時計が駄目なところをみると、innerText が駄目。

っぽいですね。

この対処をしますか。

カテゴリー: 開発, ブログパーツ | ブログパーツで画像の切り替え はコメントを受け付けていません

ブログパーツを作る(準備)

そんな訳で、引き続き、美女Linuxのパーツ作り。

デスクトップの飾り物は、Windows のサイドバーガジェットで十分そうなので、お次はブログパーツな訳。

ブログに貼りつけるタイプで考えられるのは、

  • Flash で作る。
  • Silverlight で作る。
  • Javascript で作る。
  • HTML5 を駆使して作る。

の4パターンがあります。一般的なのは Flash で、先駆的なのは HTML5 のパターンなのですが、欠点もあって、

  • Flash の場合は、iPhone/iPad で動かない。
  • HTML5 の場合は、IE8以下で動かない。

という制約があります。あと、Siverlight にすると、

  • そもそも、Silverlight を入れていない。

という障壁もあったりして。

現在のところ、美女Linux のブログパーツのユーザー、マニアックではない一般ユーザー(なのかな?)なので、他とのコラボレーションなどを考えると、パーツの貼り付け時に障壁の高いものはパスしたほうが良いかなと。

そんな訳で、候補としては、

  • Flash でのブログパーツ

が、一番の候補なんですが…ああ、手元に Adobe Flash Pro CS5 なんて代物はないのでして(そのうち、体験版で試してみるとして)、画像切り替えぐらいな処理なので、ここでは Javascript オンリーで作りましょう。

# ブログによっては、script タグを貼りつけられないところも多いので、Flash も用意しておくべきだよなぁ、と。

さて、ここから本題ですが、デスクトップで作ったサイドバーガジェットと似たもの作ります。

サイドバーガジェットを作る(準備) | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1485

なので、機能はざっくりとこれだけ。

  • 画像を表示させる。
  • 特定の URL へジャンプ(ブラウザを開くで十分か)。
  • 一定間隔で、画像をダウンロードして表示?
  • コマンド検索ができると良いかなと。

これに加えて、

  • 画像自体は、他サイトから持ってくる。
  • 画像リストや、コマンド検索ができるように、リストを取得する。

のが必要。

このリストの部分は、よく考えたら「xmlhttprequest のクロスドメイン」の問題があって、Javascript オンリーで作る場合は、ひと工夫は必要ですね。

XMLHttpRequest のクロスドメインの制約についてまとめたφ(..)メモメモ – 猫(=・ω・=)顔 1.0β
http://d.hatena.ne.jp/nyagao/20070529/1180452264

20101104_02.jpg

を見ていくと、

<script src=”…”> を動的に生成して持ってきちゃう
この場合 src はどこでももってこれちゃう。でも、引っ張ってくるデータは JSONP のように「JavaSciprt のコード」じゃないとダメ、という制約がつく。

ってのが良さそうなので、リストの取得にはこれを使ってみます。

Javascript 埋め込み型のパーツの作り方は、↓を参照にして。

第1回 ブログパーツの基礎知識 | Think IT
http://thinkit.co.jp/article/823/1

20101104_01.jpg

という訳で、作り始め。

 

 

 

カテゴリー: 開発, ブログパーツ | ブログパーツを作る(準備) はコメントを受け付けていません

サイドバーガジェットでXMLHttpRequestを使う

ガジェットからサーバーに検索を掛けて、応答を表示、なんてのを実現する場合は、XMLHttpRequest を使います。

XMLHttpRequest は、ajax でお得意なところなので、巷に解説記事があるので、それを参照と。

自分好みのガジェットを作る! Windowsサイドバーガジェット作り入門:第3回 ガジェットを作ってみる(中編)|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/windows-gadget/0003?page=1

ちょうど、そういう記事があったので、流用していきます。

普通のAjaxの場合は、非同期で行うのでコールバックを作るのですが、ガジェットの場合は別に同期でも良いかな、と。

そうなると、ガジェットからXMLHttpRequestの呼び出しはごく簡単に、

 
		// command seach 
		function search(keyword) {
		    var xhr = new XMLHttpRequest();
		    xhr.open("GET", "http://moonmile.net/php/linux.php?keyword="+ keyword, false );
		    xhr.send(null);
		    return eval(xhr.responseText);
		}

な風なものが十分。

これを表示する場所は、まだ決めていないのですが、先の記事にある通り Flyout を使うのか、って感じです。

そう、サーバーからの戻り値は、JSONが良いようです。最後の、

return eval(xhr.responseText);

のところで、javascriptの配列に直すので、XMLで扱うより便利。。。ですが、逆に言えば .NET クライアントとかで扱う場合にはちと不便ですね。

という訳で、材料は揃ったので整形していきましょうか。

# そうだ、思いついたんだけど、ガジェットで jQuery って使えるんだろうか?

 

カテゴリー: サイドバーガジェット | サイドバーガジェットでXMLHttpRequestを使う はコメントを受け付けていません

ガジェットの画像を一定間隔で切り替える

そんな訳で、ガジェットの画像を切り替えます。

最終的には、特定のURLからXMLデータを拾ってきて(画像ファイル一覧とか)、それにしたがって、ぐるぐると廻すのが良いのですが、ひとまず画像を切り替える部分だけ。

ガジェットの中身はDOMで、普通のブラウザのように扱えます。なので、背景画像を切り替える場合でも、src プロパティの値を変えるだけです。

ガジェット内での指定は、「url( images/photo.png )」のように指定しています。これを、http で指定すれば、そのまま外部サーバーから画像を持ってこれます。

 

     <script type=”text/jscript” language=”jscript”>

var timerid;
var sec = 0;
var count = 0;


function start_timer()
{
 timerid = setInterval( “interval()”, 5000 );
}
function interval()
{
 sec += 5;
 if ( sec >= 30 ) {
  sec = 0;
  count++;
  if ( count >= 4 ) {
   count = 0;
  }
        var oBackground = document.getElementById(“imgBackground”);
        oBackground.src = “url(http://moonmile.net/images/photo”+count+”.png)”;
 }
 var dd = new Date();
 var hour = dd.getHours();
 var min  = dd.getMinutes();
 var s    = dd.getSeconds();
 var status = (“00″+hour).slice(-2,4) + “:” + (“00″+min).slice(-2,4)+”:”+(“00″+s).slice(-2,4);
    var clock = document.getElementById(“clock”);
 clock.innerText = status;
}


        // ——————————————————————–
        // Initialize the gadget.
        // ——————————————————————–
     function init()
     {
         var oBackground = document.getElementById(“imgBackground”);
         oBackground.src = “url(http://moonmile.net/images/photo0.png)”;
   interval();
   start_timer();
        }
     </script>
    </head>
 
<body onload=”init()”>
    <g:background id=”imgBackground”>
 <div id=”clock”>00:00</div>
 <div id=”copyright”><a href=”http://bijo-linux.com”>bijo-linux.com</a></div>
 </g:background>
</body>
</html>

あとは、タイマーを使って、一定間隔で呼び出されるようにすればOK。

上のソースでは、時刻も表示していますが、デバッグ用なので、後で消してしまいます。

あとは、コマンド検索ですね。これは、サーバーに対してxml-rpcとかが良いかな。

 

カテゴリー: サイドバーガジェット | ガジェットの画像を一定間隔で切り替える はコメントを受け付けていません

ガジェットに画像を貼りつける

Windows サイドバーガジェットの続き。

まずは、画像関係を変えてしまいましょう、ってな訳で、

株式会社Linuxジャパン | Linuxに関わるソリューションをご提供
http://linux-japan.co.jp/

からロゴを拝借。

20101102_04.jpg

変えないといけないのは、

  • 左上のロゴでてくる、大き目なアイコン。
  • 右下の説明用の小さなアイコン
  • 左下の説明文

ですね。

これは、gadget.xml を書き換えます。

HelloWorld のガジェットをコピーして、ちまちまと変えればOK。

20101102_05.jpg

大きめなガジェットになると、namespace を変えたほうがいいような気もするので、一応変更。

他に、背景の画像を変えたいので、

     function init()
     {
         var oBackground = document.getElementById(“imgBackground”);
         oBackground.src = “url(images/photo1.png)”;
        }
     </script>
    </head>
 
<body onload=”init()”>
    <g:background id=”imgBackground”>
 <div id=”copyright”><a href=”http://bijo-linux.com”>bijo-linux.com</a></div>
 </g:background>
</body>
</html>

↑なところを変えます。

背景色が透明なPNGを使うと、デスクトップが透けて見えますね。

Developing a Gadget for Windows Sidebar Part 2: The G:BACKGROUND, G:IMAGE, G:TEXT Presentation Elements and GIMAGE Protocol
http://msdn.microsoft.com/ja-jp/library/bb676240(v=VS.85).aspx

↑を見ると、body タグの background で指定することもできますが、透明色を指定しないと駄目なので、いまいちかなぁと。

そういう訳で、途中経過がこれです。

20101102_06.jpg

<注 肖像権があるので、他にコピーはしないでくださいね>

写真を貼りつけるぐらいならば、これでOKという訳です。

リンクのほうは、普通に a タグを付ければOKなようです。

あと、ガジェットを作る時なのですが、いちいち zip ファイルを作って、拡張子を gadget に変えて、というのは面倒なので、

C:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows Sidebar\Gadgets\

のフォルダを直接編集すれば効率が良くなります。一度ガジェットを消して、もう一度デスクトップに追加し直せばガジェットが更新されています。

 

 

カテゴリー: 開発, サイドバーガジェット | ガジェットに画像を貼りつける はコメントを受け付けていません

サイドバーガジェットを作る(準備)

美女linux 関連で、調べものを。

デスクトップに出てくるツールですが、「ウィジット」と言ったり「ガジェット」と言ったりするようで、、、

Windows 的には「サイドバーガジェット」が正式名称みたいです。

Developing a Gadget for Windows Sidebar Part 1: The Basics
http://msdn.microsoft.com/ja-jp/library/bb456468(v=VS.85).aspx

↑から辿ると、諸々のチュートリアルとサンプルをダウンロードできます。

ひとまず、ガジェットのサンプルのダウンロードをすると、

Gadget Samples For Windows Sidebar
http://msdn.microsoft.com/ja-jp/library/bb735517(v=VS.85).aspx

  • SDK_docked.gadget
  • SDK_Flyout.gadget
  • SDK_Graphic.gadget
  • SDK_HelloWorld.gadget
  • SDK_Settings.gadget
  • SDK_SystemDebug.gadget

というサンプルのファイルがあります。

この拡張子を gadget から zip にして解凍すると、中の HTML や javascript が見れます。

20101102_01.jpg

HelloWorld.html を眺めると、普通にHTMLだったりします。

20101102_02.jpg

# このあたりの仕組みは、adobe air とか yahoo! ウィジットとかと同じですね。
# 多分、iGoolge ウィジットも同じかと。

デザインはさておき ^^;

当面、私がやりたいことは、

  • 画像を表示させる。
  • 特定の URL へジャンプ(ブラウザを開くで十分か)。
  • 一定間隔で、画像をダウンロードして表示?
  • コマンド検索ができると良いかなと。

ってなぐらいで、大したことをやりたい訳ではありません。

なので、この位は、さっくりとできなくちゃね。。。と自分を追い込んでおいて、次へ続く。。。

 

カテゴリー: 開発, サイドバーガジェット | サイドバーガジェットを作る(準備) はコメントを受け付けていません

つい読み専用ブラウザ TwiNetReader ver.0.4

ツールの公開が続いていますが、、、どうにも、IE8でnewtwitterの調子がおかしいので、しばらく旧版に戻して使うことにしました。

で、旧版に戻すと、トップにある「新しいtwitterが公開されました!」ってのが、うざったいのです。

なので、これを消します(苦笑

ダウンロードは、こちらから。

IE8だと、こんな風に余計なものが。。。

20101021_02.jpg

つい読みブラウザだと、こんな風になります。

20101021_03.jpg

どうも、newtwitterの不具合は、IE8のJavascript関係のエラーなんですよね。FirefoxやChromeだと、うまく動きます。IE8のJavascriptの遅いのが原因なのかもしれず、IE9だと大丈夫なんじゃないかなぁ、と思ったりもするのですが。

ただ、この動きだとIE8を使っている人にはtwitter自体を勧められませんよねぇ、とか思ったりします。別なクライアントを使えばいいんでしょうけど、最初はtwitter.comが提供しているものを使うのがベターですから。

 

カテゴリー: ツール | つい読み専用ブラウザ TwiNetReader ver.0.4 はコメントを受け付けていません

特定の検索ロボットを(クローラー)を排除する

ちょっと忘備録的に。

尖閣問題で、百度(Baidu)のクローラーを排除じゃ、とはツイッターで書いたのですが、ま、岡崎図書館の例もあるので、試しに、特定のクローラーを排除してみます。

特定 IP で排除しても良いのですが、クローラーの場合は複数ある場合が常なので、UserAgent で排除します。

UserAgent は偽装している場合も多いのですが、最近のクローラーは律儀に設定してくれるので、これで排除できます。

本来は、robots.txt で排除すべきなんでしょうが、robots.txt のほうは、

  • クローラー側で、クロールするか否かを決定する。

という欠点(私には致命的な欠点だと思うのですが)があります。Googleなどのような行儀の良いクローラーの場合は効果があるんでしょうが、自作のクローラーなんかだと、チェックしていない可能性は大ですよね(単なるプログラマのサボり、という意見もあるでしょうが、ちょっとしたクロールをしたい場合なんかは、さっくりと robots.txt を無視しかねません)。

なので、サーバー側で自己防衛するのが、良い手段かな、と。

というわけで、wordpress 側でブロックできる方法を探していたのですが、どうやら apache のほうでブロックできるので、それを使います。

まず、apache のログから、Baidu が使っているクローラーの UserAgent をチェックします。

Baiduspider+(+http://www.baidu.jp/spider/)

多分、百度の日本法人サーバーから飛んできているのでしょう。URLも書いてあります。

これを、「Baiduspider」の文字列を含む UserAgent をガードする場合、.htaccess に以下の記述をします。

SetEnvIf User-Agent “Baiduspider” deny_ua
order allow,deny
allow from all
deny from env=deny_ua

SetEnvIf を使って、一旦 deny_ua という変数に割り当てた後、deny で拒否する、という流れだそうです。

この .htaccess を wordpress がインストールされているディレクトリに置けばOKです。

参照元

WordPressもUserAgentでスパムを拒否してみる
http://blog.browncat.org/2007/06/wordpressuseragent.html

実は、このブログに来る百度のクローラーは、全体の5%ぐらいなので負荷的には大したことはありません。つまりは、営業/露出的にも大したことがないということで、ひとまずカット。

ちなみに、Googleのクローラーは

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

な感じで UserAgent を付けてくるので、「Googlebot」でガードしてしまえば良さそうです。

試験サイトを公開する(Googleにはクロールされたくないとか)場合に使えますね。

試験サイトの場合は、特定のクライアント(社内からのアクセスとか、個人宅からのアクセス)となることが多いので、アクセスするときの IP で許可するのも良いかと思います。

 

カテゴリー: 開発 | 特定の検索ロボットを(クローラー)を排除する はコメントを受け付けていません

アメブロ自動ペタツール ThxPeta ver.0.6

本当は、「アリぷら」の委譲編を書きたいのですが(「アリぷら」ってのは「アリスはプラダがお好き」の略です)、なんとなく自動ペタツールをヴァージョンアップ。

まあ、単純にIEのかちかち音を消しただけです。

ダウンロードは、こちらから。

20101019_03.jpg

今回は2枚 WebBrowser を持っています。

ペタペタする時は、後ろに隠れた WebBrowser を使います。非表示にしている間は、Navigate で URL を指定しても、かちかち音が鳴りません。

# 過去ログなんかを眺めると、非表示にしたときにうまくデータ取れない時があるようなので、要注意ですが。自動ペタのほうは大丈夫です。

 

カテゴリー: ツール | アメブロ自動ペタツール ThxPeta ver.0.6 はコメントを受け付けていません