BloggerにLikeボタンを設置する方法

毎日投稿 1日目
最近、会社でFacebook旋風が吹き荒れているようなので、個人的な当ブログも
Facebookと絡めていこうと思いました。
早速、BloggerにLikeボタンを設置する方法です。
ここのいう通りに設置しました。

Facebook Like / Recommend Button For Blogger

1点詰まったところ

  • data:post.body のあとにコピペしてね、と記述されていたのですが data:post.body が見つからずあたふた。
    ウィジットのテンプレートを展開にチェックをいれることで見つかりました。

FacebookファンページのStatic FBMLでFBJS (Facebook JavaScript)を使ってみた。

最近、Facebookが国内でもちょくちょく話題に出てきているみたいなので、いろいろと調べたした結果をメモとして残しておきます。(どっかの誰かが流行らそうとしている陰謀かもしれないですが)
Facebookのファンページ Facebookページで、タブのカスタマイズによく使われているのは
・Static FBML アプリケーションを使う
・独自にアプリケーションを構築する
の2パターンだと思います。 ファンページ Facebookページっていうのは、芸能人とか、企業とかのコミュニティ用のサイトみたいな感じです。 掲示板とか、動画とか、イベントとか、独自のアプリケーションとか、いろんな機能を ファンページのタブとしてくっつけることが出来ます。
(このへんは、あんまり真面目に調べてないので大きく間違っているかもしれません。)
で、Static FBML とよばれるアプリケーションを使ってタブを作成すると、 FBML(FaceBook Markup Language) FBJS (FaceBook JavaScript)を使って かなりカスタマイズしたページを作ることが可能になります。
ただ、PHPとか使ったページを作りたい場合は、独自にアプリケーションを構築する必要があります。
アプリケーションの作り方とかは、ググってください。
[2010.10.26追記] 【Facebook】Facebookアプリがわからなすぎるので調べてみたが分かりやすかったです。
FBMLは、Facebook内で使える独自のタグです。
FBJSは、Facebook内で使えるJavascriptのサブセット?です。
FBJSで出来ることのうち、ひとまず動かした結果を貼っつけておきます。
(随時、追記・修正するので貼っつけたままだと動かない可能性があります。)

Read More


DooPHPのORMについてのメモ

DooPHPとは、「すんげぇ軽いぞ」というのをうたってるPHPのフレームワークです。作り的には、yiiを安っぽくした感じを受けました。で、その「すんげぇ軽いぞ」を鵜呑みにしたまま、DooPHPをいじくってたのですが、なんせ日本語の資料が皆無のため、英語嫌い(必要なのは重々承知していますが)の私には、ソースコードとにらめっこするしか手段がなく、ORM関連のとこでいろいろと調べたのでメモっておきます(メモなので、ころころ書き換えます。鵜呑みにしないでください)。

Read More


『elRTE 1.0』と『elFinder 1.1』でドツボった。

ロシア発のWYSIWYGがかなりよさげ。

elRTEelFinder導入した際にちょっとドツボったので設置方法をメモっておく。

『elRTE 1.0』からjQuery-UIのバージョンが上がりました。そのためそのままインストールすると
『elRTE 1.0』と『elFinder 1.1』でjQuery-UIのバージョンが異なるためまともに動きませんでした。
ちょいと調べると、利用しているモジュールに若干の違いがありました。

『elRTE 1.0』側で使っているの

Core、Widget、Mouse、Postion、Draggable、Droppable、Resizable、Selectable、Dialog、Effect

『elFinder 1.1』側で使っていて、『elRTE 1.0』で使っていないもの

Selectable
で、『elRTE 1.0』側にあわせて、最新のjQuery-UIで、上記のモジュールすべてをダウンロードして利用することにしました。
Finderもなんとか表示されています。

もう少し動きを調べて問題なければ、TinyMCEからelRTEに乗り換えます。


concrete5 編集履歴の日付フォーマットが気に入らない

concrete5の編集履歴の日付のフォーマットが月/日/年に整形されているのが
個人的にいやなので修正。
<img style=”display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 194px;” src=”http://2.bp.blogspot.com/_1DT3KqJm8Ng/SxhdmLs_6vI/AAAAAAAAAAc/30yZOCyNaXo/s320/version.jpg” border=”0” alt=””id=”BLOGGER_PHOTO_ID_5411177862843591410” />

修正箇所

concrete5.3.3.1 日本語版

/concrete/tools/versions.php (386行)付近

1
echo date('m/d/Y g:i A', strtotime($v->getVersionDateCreated('user')))

定数とかConfigに設定した方がいいと思うが、とりあえず変更

1
echo date('Y年m月d日 H:i:s', strtotime($v->getVersionDateCreated('user')))

結果こんな感じ
<img style=”display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 82px;” src=”http://3.bp.blogspot.com/_1DT3KqJm8Ng/SxhemnMCOQI/AAAAAAAAAAk/i8BTfc3e6T8/s320/version2.jpg” border=”0” alt=””id=”BLOGGER_PHOTO_ID_5411178969733150978” />


concrete5に公開日のバグ発見?

いま、concrete5が熱いです。(個人的に)
**concrete5とは

普段、ホームページを作る時は、専用ソフトを購入してサイトを作り、アップロード等を行う必要がありました。
concrete5は、それらのプロセスを省略し、ホームページ上で、すべてを直感的に編集できるようにというコンセプトで生まれた、画期的なオープンソースCMSです。
コンクリートブロックを積み上げるようにサイトを制作して行けるようにというコンセプトの元に開発されました。また、複数人でも運用出来るような工夫がしてあります。
開発は、アメリカ・オレゴン州ポートランドのConcrete CMS, inc.が行っています。
「concrete5」はConcrete CMS, incの登録商標で、すべて英小文字で表記します。
concrete5日本語公式サイトより引用

PHPがわかれば、いろいろと改造が簡単にできそうでとても楽しいです。
今は、パッケージの作成を確認&勉強中。
とりあえず作ってみたSinglePageその1
ファイル一覧表
<img style=”display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 188px;” src=”http://1.bp.blogspot.com/_1DT3KqJm8Ng/SxYtB4C5q4I/AAAAAAAAAAM/tIM8l_PAe9s/s320/1.jpg” border=”0” alt=””id=”BLOGGER_PHOTO_ID_5410561512579902338” />
とりあえず作ってみたSinglePageその1
設定値一覧表
<img style=”display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 264px;” src=”http://3.bp.blogspot.com/_1DT3KqJm8Ng/SxYtVl8g1OI/AAAAAAAAAAU/EzkKp7HG98Q/s320/2.jpg” border=”0” alt=””id=”BLOGGER_PHOTO_ID_5410561851318654178” />
で、標題の発見したバグは下のような感じです。
もともと、公開日設定が権限管理の表示上初期化されているのを不審に思いながら、
ファイル一覧を作っている最中にバグっぽいのを発見したので開発者への連絡をどうしたらいいのかわからなかったので、備忘録代わりに残しておきます。

concrete5.3.3.1 日本語版

/concrete/models/groups.php (407行)付近

1
2
3
4
5
6
7
8
9
10
function getGroupStartDate($type = 'system') {
if(ENABLE_USER_TIMEZONES && $type == 'user') {
$dh = Loader::helper('date');
return $dh->getLocalDateTime($this->cgStartDate);
} else {
// StartDate取得なのにEndDateを取得しちゃってる
// return $this->cgEndDate;
return $this->cgStartDate;
}
}

Usagi Projectのメンバー方が見てくれることを祈ってます。


ZendFrameworkで携帯 文字化け対応

ZendFrameWorkで携帯対応してみた。その1

※動作保証しません。

ソースの文字コードがURF-8をShit-JISに変換して表示したかったが、ごにょごにょした所、いくつかはまったポイントがはったので備忘録として残しておく。
一番最初にためしたのは、Viewのフィルターでの変換
下記のようなフィルターを作成して、View->setFilter()で設定

1
2
3
4
5
6
7
8
class ConvertToSJIS implements Zend_Filter_Interface {
public function filter($value) {
// ここには半角カナ変換とか、改行・タブの除去などなど
// 処理が入ってます。
// 文字コードは直接指定ではないのですが、そのあたりは割愛
return mb_convert_encoding($value, 'SJIS-win', 'UTF-8');
}
}

View単体だと問題なかったのですが、Zend_Layoutを絡めるとバケラッタ!!
今回は、Zend_Layoutをバリバリに使いたかったので、ZendFrameWorkのソースコードを調査しました。

  • Zend_Layout内でrenderメソッドが呼び出された時に結局は、Zend_Viewのrenderが呼び出されている。
  • Zend_Layoutで呼び出されるViewは特に指定しなければ、ViewRenderに登録されたViewが使用される。
  • 今回は、Viewは特に指定していない
    結果として、こんな感じ
  1. ビューにフィルターを設定
  2. レイアウト内のビューを描画 → 描画したビューをフィルタリング
  3. レイアウトを描画 → 描画したビューを含んだレイアウトに対してフィルタリング
  4. の所で、すでに描画(文字コード変換済みのやつ)したビューに対しても再度、文字コード変換処理が実行されているっぽい
    で、さらに調査したところ、Zend_LayoutをMVCで利用した際に、最終的に呼び出されている
    Zend_Layout_Controller_Plugin_LayoutのpostDispatchメソッドで最終的な描画結果の
    書き出しをしていることを発見!!
    ここを拡張すればいけるのではという淡い期待のもと
    Zend_Layout_Controller_Plugin_Layoutの拡張クラスを作成
1
2
3
4
5
6
7
8
9
10
11
12
require_once 'Zend/Layout/Controller/Plugin/Layout.php';
class My_Layout extends Zend_Layout_Controller_Plugin_Layout {
// 親クラスのpostDispatchを継承
public function postDispatch(Zend_Controller_Request_Abstract $request) {
// 親クラスのpostDispatchを呼び出す
parent::postDispatch($request);
// 親クラスのpostDispatchで出力されたコンテンツを変換
require_once 'ConvertToSJIS.php';
$filter = new ConvertToSJIS ();
$this->getResponse()->setBody($filter->filter($this->getResponse()->getBody()));
}
}

そのあと、Zend_Layoutの初期設定している個所を以下のように修正

1
2
3
4
5
6
7
$layout_options = array(
'layoutPath' => 'レイアウトパス'
, 'layout' => 'デフォルトのレイアウトファイル'
, 'pluginClass' => 'My_Layout' // ここに拡張したクラスを設定
);
// レイアウトの開始
$layout = Zend_Layout::startMvc($layout_options);

‘2010.10.29追記’ ヘッダーの設定を忘れると文字化けするので忘れずに。

1
$this->getResponse()->setHeader('Content-Type', 'application/xhtml+xml; charset=Shift_JIS');

最初からShift_JISで作れという声も聞こえてこないこともないですが、ひとまず、UTF-8からShift_JISへの変換はうまくいったので良しとしています。
もっと楽な方法があれば、教えてほしいところです。


HTTP ヘッダー(PHP)

転載元

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// See related links for more status codes
// Use this header instruction to fix 404 headers
// produced by url rewriting...
header('HTTP/1.1 200 OK');
// Page was not found:
header('HTTP/1.1 404 Not Found');
// Access forbidden:
header('HTTP/1.1 403 Forbidden');
// The page moved permanently should be used for
// all redrictions, because search engines know
// what's going on and can easily update their urls.
header('HTTP/1.1 301 Moved Permanently');
// Server error
header('HTTP/1.1 500 Internal Server Error');
// Redirect to a new location:
header('Location: http://www.example.org/');
// Redriect with a delay:
header('Refresh: 10; url=http://www.example.org/');
print 'You will be redirected in 10 seconds';
// you can also use the HTML syntax:
// <meta http-equiv="refresh" content="10;http://www.example.org/ />
// override X-Powered-By value
header('X-Powered-By: PHP/4.4.0');
header('X-Powered-By: Brain/0.6b');
// content language (en = English)
header('Content-language: en');
// last modified (good for caching)
$time = time() - 60; // or filemtime($fn), etc
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
// header for telling the browser that the content
// did not get changed
header('HTTP/1.1 304 Not Modified');
// set content length (good for caching):
header('Content-Length: 1234');
// Headers for an download:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile('example.zip');
// Disable caching of the current document:
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Pragma: no-cache');
// set content type:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain'); // plain text file
header('Content-Type: image/jpeg'); // JPG picture
header('Content-Type: application/zip'); // ZIP file
header('Content-Type: application/pdf'); // PDF file
header('Content-Type: audio/mpeg'); // Audio MPEG (MP3,...) file
header('Content-Type: application/x-shockwave-flash'); // Flash animation
// show sign in box
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
print 'Text that will be displayed if the user hits cancel or ';
print 'enters wrong login data';

新型iPhoneの稟議をどう通すか考える

Android携帯の購入を考えていたのですが、今度発売される、新型iPhoneのほうが
いまとても欲しい。
でも、家庭内稟議をどう通すかを考えるとちょっと胃が痛いです。
・今使っている携帯を壊してみる。
・今使っている携帯を無くしてみる。
・仕事のためと偽ってみる。
どれも稟議は通りそうにないので、誠心誠意お願いしてみる。に
なりそうです。
レゴもあいかわらず購入し続けています。
レゴ クリエイター ミニカー 4838
レゴ クリエイター ミニ飛行機 4918
レゴ クリエイター ミニオフローダー 6742


動物園サイコー Part2

日曜日にまたまた動物園に行ってきました。
子供も成長していて、ぞうときりんに夢中になっていました。
今後も動物園にはちょくちょく行くだろうということから
年間パスを購入。
これで1年間はいつでも動物園に行けます。
帰りには先週と同じくレゴを購入しにトイザらスへ
嫁の白い目に耐えつつ、レゴ クリエイター・ステゴザウルス 4998を
GET!!
昼寝している子どもと嫁の横でレゴ三昧の一日でした。