jQueryで作るTwitter Tickerチュートリアルを試してみた。

2010年2月27日 — takeo

jQueryで作るTwitter Tickerのチュートリアル(A jQuery Twitter Ticker – Tutorialzine)を試してみた。

↓試したサンプル

jQueryで作るTwitter Tickerチュートリアルのサンプル

iPhoneとかのTwitterクライアントを使ってるといろんなことができるから、このチュートリアルには過剰な期待でのぞんだのだが、ショボイ。ページ開いて一度だけ指定したユーザーのTweetsを表示しているだけ。

なんでだろうと、API(Twitter API 仕様書 日本語訳 第四十五版 (2010年2月24日版))をみていると、

・いろいろやるには、認証が必要。

認証
public_timeline の取得等一部の API を除くほとんどの API で、認証を使用する。応答に protected なユーザに関する情報が含まれる可能性のある API は認証が必須となっている。
現在、OAuth認証とBASIC認証が使用可能。

・APIの実行数制限がある。(認証してない場合IPアドレスでカウントされる)

API の実行回数制限
Twitter の API は、60分間に150回まで実行できる。この実行回数制限を超えた状態でさらにリクエストを送った場合、HTTPステータスコード 400 が返る。
認証の必要なもの、不要なものの両方が実行回数制限の対象となる(以前は実行回数制限の対象外であった public_timeline の取得も、現在は対象となっている)。
認証の必要なものはユーザID(アカウント)単位で、認証の不要なものはIPアドレス単位で、実行回数のカウントを行なう。
[訳者による注記] Twitter の運用状況によっては API 制限がより厳しく設定されることがある(60分間に20回まで、など)。

ってのがあって、Javascriptだと、これくらいでやめておくほうがいいんだなと納得。

この実行回数制限を適用されると都合が悪い場合は、理由を明示の上、Twitter 開発者にコンタクトを取ること。納得できる理由が示されれば、当該ユーザを、実行回数制限適用外のスクリーン名のリストに入れる。

Twitter本家のブログパーツからガンガンAPIを呼んでいるのは、これで制限解除か。

rate_limit_status という「アカウント関連のAPI」を使うことで、実際の API 制限の実施状況を調べることができる。

これを使えば、あと何回使えるか取得できるらしい。ん?何回実行してもカウントが減らない?おかしい。

jQueryで作るTwitter Tickerチュートリアルのサンプル

Twitter APIは認証いれて、キャッシュとかしてサーバーで使うのがいいんだな。たぶん

こんどためしてみよう。

jQueryで作るFlashみたいにフェードインフェードアウトするバナー

2010年2月26日 — takeo

Flashみたいに、何枚かの写真をランダムにフェードインフェードアウトしながら表示するバナーを作ってみた。
一応、jQueryのプラグイン形式で(プラグインの作り方はてきとう!)。

画像パスと、リンク先URLをリストでプラグインに渡せば、リストをシャッフルして(最初の1回だけ)順に表示する。5秒置き(初期値)にフェードインフェードアウトしながらパラパラと画像が変わる。

これでiPhoneでもバナーがクリックできる!

サンプル

一応プラグイン形式のソース

/**
 * jQuery Shuffle Bannar plugin
 * Copyright (C) cubdesign | http://www.cubdesign.com/
 * Dual licensed under the MIT <http://www.opensource.org/licenses/mit-license.php>
 * and GPL <http://www.opensource.org/licenses/gpl-license.php> licenses.
 * Date: 2010-02-26
 * @author Takeo Tamura
 * @version 0.5.0
 */

(function($) {
    var name_space = 'shuffleBannar';
    $.fn[name_space] = function(options) {
        var elements = this;

        var settings = $.extend({
            'bannarList' : [],
			'interval':5000,
			'fadeOutTime' : 1000,
			'fadeInTime' : 1000
        }, options);

		var addData = function (v) {
            $.data(v, name_space, {});
            return $(v);
        };

		/*
		* シャッフルする
		*/
		var shuffle = function (targetArray)  {
			var i  = targetArray.length;
			 while (i) {
				var j  = Math.floor(Math.random() * i);
				var x  = targetArray[--i];
				targetArray[i] = targetArray[j];
				targetArray[j] = x;
			 }
			return targetArray;
		};

		//キャッシュ防止用
		var nocache = new Date().getTime();

		var bannarList = settings.bannarList;
		//シャッフル
		bannarList = shuffle(settings.bannarList);

		//今表示しているバナーの番号
		var currentBannarNumber = -1;

		//インターバルID
		var iId = -1;

		/*
		* バナーを変更する
		*/
		var changeBannarImage = function ()  {
			clearInterval(iId);
			 $("#shuffleBannar img:first").fadeOut(settings.fadeOutTime,function(){
				$(this).remove();
				loadBannarImage();
			 });

		};
		/*
		* バナーを読み込む
		*/
		var loadBannarImage = function ()  {
			currentBannarNumber++;

			if( currentBannarNumber == bannarList.length ){
				currentBannarNumber = 0;
			}

			var targetBannar = bannarList[ currentBannarNumber ];

			var imageURL = "" + targetBannar.image + "?nocache="+nocache;
			var linkURL = "" + targetBannar.link;

			var img = new Image();

			 $(img).load(function(){
							$(this).hide();
							$("#shuffleBannar").append(this);
							$(this).fadeIn(settings.fadeInTime);
							$(this).click(function(){location.href=linkURL;});
							iId = setInterval(changeBannarImage,settings.interval)
						}).attr('src', imageURL)

		};

        elements.each(function() {
			addData( this );
			loadBannarImage();
        });

        //method chain
        return this;
    };
})(jQuery);

ブログをリストアした

2010年2月21日 — takeo

やっぱり、昔のコンテンツを捨てるのはもったいないということで、リストアをやってみた。

エクスポート

  1. 古いサーバーを引っ張りだし、データベースをダンプをする
  2. 古いサーバーからブログに使っている画像ファイルを取り出す
  3. 古いサーバーのwordpressを取り出す。
  4. ローカルサーバーで古いサーバーのブログ環境を作る
  5. ローカルサーバーのwordpressを最新版にアップデートする
  6. ローカルサーバーのwordpressの管理画面からブログデータをエクスポートする

インポート

  1. 新しいサーバーに画像ファイルをアップする
  2. 新しいサーバーのwordpressの管理画面からブログデータをインポートする

ポイントは、インポートするときに「添付ファイルのインポート」にチェックを入れること。記事のインポートと同時に記事で使ってある画像をメディアライブラリに登録してくれる。

ただ、この方法だとタグがリストアできなかった。あとで地味につけていくしかないか。。。

昔の記事を読み読み返してみると面白い。(ほとんど、読書ブログになっていたけど)

リストアしてよかったと思う。いくつか読み返したい本がでてきたし

あれ?検索にひっかからない?

2010年2月18日 — takeo

ブログを更新して、googleやyahooにひっかからない場合は要チェックだ。
robots.txtの設定がクローラのアクセスを拒否する設定になっている可能性がある。

サーバーをレンタルサーバーに移したばかりなのだが、ブログを更新して「このキーワードだとひっかかるだろう」っていうキーワードで検索してみてもページがヒットしなかった。
移動してまもないからかと思っていたが、どうやらrobots.txtの設定がクローラのアクセスを拒否する設定になっていることに気付いた。

これは、 Google ウェブマスター ツール のおかげです。

こんな感じで教えてくれた。

はやく気付いてよかった。

検索にひっかからないWebページは何の意味ももたない。

早速robots.txtを生成してアップした。

再クロールで、インデックスされることを祈る。

レンタルサーバーがこんな初期設定でいいのか?

ページ読み込み時にFlashにフォーカスを与える(firefox)

2010年2月17日 — takeo

Flashでタイピングゲームを作っていて、ページ読み込み時にFlashにフォーカスがあたらなくて使いづらいなと思いやり方を調べてみた。ページ読み込み時にjavascriptでfocus();するといいらしいが、firefoxでフォーカスできない。

Javascriptのfocusはこんな感じ。
swfobjectを使っている場合は、addLoadEventやaddDomLoadEventのイベントで呼べばいい。

	var flashObjectId =  "sample";
	var expressInstallPath = "../../../js/libs/swfobject/expressInstall.swf";
	var flashTargetVersion =  "9.0.0";
	var flashvars = {};
	var params = {};
	swfobject.embedSWF("StartFocusSapmle.swf",flashObjectId, "320", "240", flashTargetVersion,expressInstallPath, flashvars, params);

	function setFocusOnFlash() {
	  var fl = document.getElementById(flashObjectId);
	  if (fl) { fl.focus(); }
	}

	if (swfobject.hasFlashPlayerVersion(flashTargetVersion)) {
		swfobject.addLoadEvent(setFocusOnFlash);
		//swfobject.addDomLoadEvent(setFocusOnFlash);
	}

ただ、これだとfirefoxはだめ。調べているうちにwmodeをopaqueかtransparentに設定すればいいという情報が。いろいろ試してみると、

ページ読み込み後にFlashに自動フォーカスするサンプル(wmode:”window”)

ページ読み込み後にFlashに自動フォーカスするサンプル(wmode:”opaque”)

ページ読み込み後にFlashに自動フォーカスするサンプル(wmode:”transparent”)

確かに、wmodeをopaqueかtransparentに設定するとフォーカスがあたった。
ただし、このwmodeは曲者で、opaqueやtransparentに設定すると日本語に入力がおかしくなる。firefoxでは、まともに入力さえできない。
flash側からExternalInterfaceでjavascriptのfocus();をやってみたりしたが実現できず。断念。

今回のタイピングゲームは英数字だけなのでこれでいいのだが、普通に使うのには中途半端だ。
英語にかぎればこれでなんとかなる(日本語の入力をするFlashを作ることもあまりないのだけど)

今回はこれでいこう。

	var flashObjectId =  "sample";
	var expressInstallPath = "../../../js/libs/swfobject/expressInstall.swf";
	var flashTargetVersion =  "9.0.0";
	var flashvars = {};
	var params = {wmode:"transparent"};
	swfobject.embedSWF("StartFocusSapmle.swf",flashObjectId, "320", "240", flashTargetVersion,expressInstallPath, flashvars, params);

	function setFocusOnFlash() {
	  var fl = document.getElementById(flashObjectId);
	  if (fl) { fl.focus(); }
	}

	if (swfobject.hasFlashPlayerVersion(flashTargetVersion)) {
		swfobject.addLoadEvent(setFocusOnFlash);
		//swfobject.addDomLoadEvent(setFocusOnFlash);
	}

※あと、opaqueやtransparentモードにすると、FlashのEvent.ACTIVATE、Event.DEACTIVATEイベントが拾えないみたいだ。きもちわるい
サンプルソース

package com.cubdesign.sample.startfocus {
	import fl.controls.Label;
	import fl.controls.TextInput;

	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.external.ExternalInterface;

	/**
	 * @author takeo
	 */
	public class StartFocusSapmle extends Sprite {
		private var label : Label;
		private var text : TextInput;

		public function StartFocusSapmle() : void {
			if (stage) {
				init();
			} else {
				addEventListener(Event.ADDED_TO_STAGE, init);
			}
		}

		private function init(e : Event = null) : void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			stage.addEventListener(Event.ACTIVATE, windowActivete);
			stage.addEventListener(Event.DEACTIVATE, windowDeActivete);

			drawBackground();

			label = new Label();
			label.text = "読み込み完了";
			addChild(label);

			label.move(100, 70);

			text = new TextInput();
			addChild(text);

			text.move(100, 100);

			//ExternalInterface.call("setFocusOnFlash");

			text.setFocus();
		}

		private function drawBackground() : void {
			var g : Graphics = this.graphics;
			g.beginFill(0xffffcc);
			g.drawRect(0, 0, 320, 240);
			g.endFill();
		}

		/**
		 * フォーカスアウト
		 */
		private function windowDeActivete(event : Event) : void {
			label.text = "windowDeActivete";
		}

		/**
		 * フォーカスイン
		 */
		private function windowActivete(event : Event) : void {
			label.text = "windowActivete";
			text.setFocus();
		}
	}
}

ブログパーツデビュー

2010年2月14日 — takeo

本当にいまさらですがブログパーツを貼ってみました。
Twitter本家のブログパーツです。

Twitterのプロフィール設定画面で、

あなたのホームページかブログのアドレスを登録してみませんか?
(あなたのWEBサイトにもTwitterを表示させよう)

っていうのがあって、リンク先の

Twittrウィジェット作成ページ で2,3個設定すると簡単にできてしまいます。
デザインも変更できるみたいですが、とりあえずそのままいくと、

のようなブログパーツが完成しました。

簡単だ!

いまさらながら、ブログパーツを作ってみたくなった。

考えてみよう。

レンタルサーバーを借りてブログを復活させました。

2010年2月14日 — takeo

2年ほど前。

こどもが生まれるということで、自宅サーバーは邪魔だという話になり、サーバーを押し入れにしまってWebを停止しました。

MailはGoogleを使っているし、ブログも面倒になっていたので特に気にならず放置していました。

最近、Twitterやっていて、「これもう少し長く書きたい」と思うことが多々あり、ブログ再開しようかいう気分になりました。

レンタルサーバーを借りました。(まだお試し期間ですが)

2004-2008の5年間のエントリーを復活させようかなって思いましたが、今の興味とかけ離れたものを載せてもしょうがないと思い、新たにスタートすることにしました。基本的にTwitterの補助的な、メモ書きのようなものになると思われます。

さて、今回はつづくかな。

(c) 2010 cubdesign | powered by WordPress with Barecity