wedataにSITEINFOを書くのではなく、wordpress2.7.1のHTMLにmicroformats埋め込んで設定した。
これでインデックスページやタグページなどで無限スクロールでjjjjkpjjpjpjkjpoできる
たいへん参考になった:
mixi Engineers’ Blog ? Find Job !がAutoPagerizeとLDRizeに対応
HTMLってひとつのtagに複数classを設定する時は、スペース区切りで列挙できるんですね
■LDRize対応
wp-content/theme/テーマ個別ディレクトリ/ 以下の記事に関わるファイル全部修正し、jk移動に関わる情報を埋め込む
- 記事1つのコンテナタグに class=”hentry” → スクロールする区切りになる
- 記事タイトルに class=”entry-title” → pした時に右下に記事タイトルがたまる
- 記事permalinkに rel=”bookmark” → vやoした時に開くリンク
■AutoPagerize対応
wordpressの関数を修正する。次のページへのリンク要素を指定しておくと、自動で継ぎ足してくれる
参考:WordPress サイトの AutoPagerize 対応 – JACO-BASS
wp-includes/link-template.php を編集
- function get_previous_posts_link
- function get_next_posts_link
autopagerizeの場合、prevはいらないか
pageElementとinsertBeforeは書かなくてもinoveテーマだと動いた
LDRizeのほうはテーマに書けたからいいけど、AutoPagerizeはwordpress本体の関数を修正してるので本体アップデートでリセットされそう。毎回手動で書き直すしかない。
学文社
売り上げランキング: 356816


フランス・ドイツのまとめ本的な感じ
ピアソンエデュケーション
売り上げランキング: 99561






早川書房
売り上げランキング: 3525
いつのまにか翻訳されてしまっていて、英日両方持っている状態になった。
アスキー
売り上げランキング: 198288






普通にC言語だいたいやった後でC++に行くにはこれがよさげ
毎日コミュニケーションズ
売り上げランキング: 5371




Processingの例題とかで出てくるような画像処理に必要な関数は一通り揃っているので組み合わせれば凄い速度で動く。
サンプルコードは、一部分しか掲載されていなくて大事なdefine部分などが抜けていて意味不明になっている事もあるけど
webで探せば琉球大のページなど全文が掲載されているサイトがあり助かる
カットシステム
売り上げランキング: 179506
Pipes: Flickr Auto Feedで新着500件のRSSを作ってGoogle Readerに読み込ませたら快適になった。サムネイルじゃないのでビデオもGoogle Reader内で見れる。
ステキなガジェットを作っている人をかたっぱしからFlickrのコンタクトに加えていたら、いつのまにか100人を超えていて、とんでもない量の新着写真が毎日来るようになった。
たとえば今、2日ぶりに新着を見てみたら656枚の写真があった。
Flickr: From your Contactsを見ると自分のコンタクトのアップロードした写真の一覧があるが、サムネイルなので何がなんだかわからなくて全然駄目。
RSSも出ているけどこれもthumbサイズだし、なぜか新着20件しか取得できないので使い物にならない。普通のFlickrユーザは数十枚まとめてアップロードするので、すぐに新着が流れてしまって取りこぼしてしまう。
本当はこのpipesをLDRで読みたいけど、PipesのRSSをLDRに登録してもPipes自体が重いからなのかFeedが来ない。なのでこれだけはGoogle Readerを使う事にした
—–追記—–
Google Reader Minimalistic for Greasemonkeyを使うと写真が画面に入りきるようになる
OpenCVで、画像の特定領域のHSV(HSB)を増やしたり減らしたりするツール「colortrans」を作った。
コマンドラインからファイル名を渡すと実行できるタイプ。
こんなコマンドでお手軽一発生成できます
colortrans ../data/shokai.jpg result.jpg -30 50 -10 ../data/shokai-mask.bmp
できた画像
■ダウンロード
mercurialリポジトリをbitbucketに置いた。
shokai / twitter face color change / overview — bitbucket.org
Ubuntu8.04でビルドしたバイナリもコミットしておいた。OpenCVなので他環境でも同じコードをコンパイルしなおせば実行できるはず。
twitterでriywoさんがアイコンに自分の最近の発言ワードを出しているのを見て、じゃあ自分の顔色を使って何か表現できないかという事で作り始めた。なのでリポジトリ名が twitter face color change になっている
でもまだ何と色を連動させればいいのか決めかねているので、アップローダはまだ書いてない。たぶんtwitterと関係のないリアルワールドの情報の方が面白い。俺の脈拍とかクリエイティブビートとか・・・
■顔だけ色を変える方法
画像認識ではできそうにないので、手動でマスクを作る
イラレでもPhotoshopでもいい。
元画像と同じサイズで、顔部分だけ黒で描く画像間違えた。顔を白で、顔以外を黒で描くだった
モノクロ2階調のBMP形式で保存する
ファイル名はなんでもいい。
できたマスクBMP画像と、今回使うjpeg元画像
■変換する
colortransというUbuntuでビルドしたバイナリがコミットしてあるので、
入力ファイル名 出力ファイル名 Hue Saturation Value マスクファイル名
の順に引数を渡すとできる。
colortrans shokai.jpg result.jpg -30 50 -10 mask.bmp
マスクを指定しないと、画像全体の色を遷移させる事も出来る
colortrans shokai.jpg result.jpg 40 0 0
これはこれで何かに使えるかもしれない
■プログラム
MacやWindowsでも、OpenCVをはじめたで書いたとおりビルド環境を作れば使える。
OpenCVは簡単なので、各言語バインディング使うより普通にCで書いた方がいいと思う
colortrans.cpp
#include <stdio.h>
#include <highgui.h>
#include <cv.h>
IplImage *img = NULL;
IplImage *imgMask = NULL;
IplImage *imgHsv, *imgResult, *imgHue, *imgSat, *imgVal;
int main(int argc, char** argv){
if(argc < 6){
puts("Put filenames and HSV(HSB) as ARGS");
puts(" colorchange input output H(int) S(int) V(int) (mask)");
puts("Usage:");
puts(" colortrans ../data/shokai.jpg result.jpg -30 50 -10 ../data/shokai-mask.jpg");
puts(" colortrans ../data/shokai.jpg result.jpg 40 0 0");
return -1;
}
img = cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR);
if(argc > 6) imgMask = cvLoadImage(argv[6], CV_LOAD_IMAGE_GRAYSCALE);
imgHsv = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_8U, 3);
imgResult = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 3);
imgHue = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
imgSat = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
imgVal = cvCreateImage(cvSize(img->width,img->height), IPL_DEPTH_8U, 1);
cvCvtColor(img, imgHsv, CV_BGR2HSV);
cvSplit(imgHsv, imgHue, imgSat, imgVal, NULL);
cvAddS(imgHue, cvScalarAll(atoi(argv[3])), imgHue, imgMask);
cvAddS(imgSat, cvScalarAll(atoi(argv[4])), imgSat, imgMask);
cvAddS(imgVal, cvScalarAll(atoi(argv[5])), imgVal, imgMask);
cvMerge(imgHue, imgSat, imgVal, NULL, imgHsv);
cvCvtColor(imgHsv, imgResult, CV_HSV2BGR);
cvSaveImage(argv[2], imgResult);
}