プラグインで寄付の代わりとなる、いい方法ないかな

このブログの開設と、wordpress用のプラグインを開発・配布をしてきて、もうすぐ半年ぐらい経過するような、したような。うろ覚えです。

 

ブログ開設当初は、プラグインを作って配布して、
寄付をもらったり有料プラグインを作って買ってくれたらな~という軽い気持ちでスタートしました。

で、後から気づいたのですが、そもそも日本の法律が寄付がダメ(個人間の送金)らしいのです。

以前の記事はこちら

 

で、実際に開発・配布してみて思ったこと。

期間やプラグインの質・量にかなり左右はされますが、それは。

「うん、誰からも寄付されないなら、開発を続ける人はそりゃ少なくなるだろうな」

という事でした。(あくまでも私 gqevu6bsiz 自身の意見です)

 

そして、最近知ったのですが、

http://ideasilo.wordpress.com/2012/09/16/speech-at-wordcamp-tokyo-2012/

確かにオープンソースはいいと思います。

私も無料プラグインをダウンロードして、学習はしたので、オープンソースの恩恵はもちろん多々受けています。

 

ですが、日本の法律で寄付がダメってなっている以上日本人プラグインの開発者は、
無料配布で趣味で続けられる人だけ続けてねって事なのか?って思いました。

寄付が法律でダメならどうしたらいいんだよ~

有料販売でもして、少しでもお金が入ってくれないとモチベーションあがんないよ~

 

ちなみに人によっては嫌われますが、gqevu6bsiz は正直ちょっとしたお金が入ってくれることが、
モチベーションアップとなります。

詳しくはこのサイトについてを参照

 

という事で、私の場合はamazonのギフトカードをプリーズとしています。
が、全くの反応なし(ノ△・。)
※プラグインの質・量・ユーザー数及びダウンロード数とかはおいといて。
もちろんまずはがんばります。

 

色々考えたり調べたりしました。

Contact Form7が無料って、よく考えるとすごいですね。いや、よく考えなくてもすごいですね 😉
あ、寄付をお願いしているんですね。 え?日本の方ですよね?あれ?なんだろな~

ん?プラグインを無料で使用もできるけど有料で買うこともできる(値段も選べる)ような仕組みだと、
法律はOKなんでしょうか。

 

試しに、そういう仕組みを2つぐらい機会を見計らって、試してみようかな。

あ、寄付するつもりで、別のこのプラグインを買ってください。的な感じでもいけそうだな。

 

その前に、プラグインの質をあげねば。。
もっとその前に、この人のプラグインは大丈夫と信頼される人になる事と、
これがあって簡単にカスタマイズが出来たよー助かったよーというプラグインを作らないとな。。

おっと。。もっとその前に。。

paypalの口座を開設せねば :oops:

データベースへのオーバーヘッドを試してみた

ひとつのキーに、まとめてデータを入れるとオーバーヘッドがかかるかもしれないよ」

と教えられ、現在ひとつのキーに入れないような設計をしている最中で、

 

じゃあ、試しに、1,000の値 を、

  • ひとつのキーに全データをシリアライズして入れる
  • 1,000のキーとして入れる

というそれぞれの方法では、実際にどれだけオーバーヘッドの可能性があるかどうか。

 

ターゲットは wp_options

オーバーヘッドは一切ありません。

テーブル一覧
テーブル一覧

ここで挿入する値の定義

1,000個の1~10,000,000の乱数を作成して挿入

つまり、

array(
0 => 2384、093,
1 => 6923230,
2 => 8053892,
...
999 => 1034544
);

のようなデータです。

データには日本語や英文が入る場合が多いので、今回はデータ量が少ない気がして、

良いテストかどうかと聞かれれば、分かりません。としか答えられませんが、

少しぐらいは何か分かるのではないかと思い、やってみることにしました。

 

wp_options にまずは、ひとつのキーに1,000の配列を挿入することを仮定して、試してみました。

$SampleData = array();
 for( $i=0; $i<1000; $i++ ) {
 $SampleData[$i] = rand( 1 , 1000000 );
 }
 print_r($SampleData);

print_r で値を確認。1,000の配列が出来ています。

これを、wp_optionsへひとつのキーとして、シリアライズしたデータをupdate_optionで挿入してみると、

ひとつのキーに挿入
ひとつのキーに挿入

ぎっしりはいりました。結果…

オーバーヘッドはなし。

 

えっ? これじゃ検証にならない。。もっとデータ量を増やして試してみよう。

ということで、オーバーヘッドされるまで、データ量を増やしながら色々と試行錯誤…。

結果。どんなに頑張ってもオーバーヘッドしなかった。。

 

参ったなぁ。指摘されているから、オーバーヘッドするはずなんだけど…

実際にオーバーヘッドしているテーブルがあったので、そのテーブルとひたすらにらめっこ。

すると、気づきました…。

データ型
データ型

MyISAM

ん?「MyISAM」?私のイサム?メルティーラブ??

軽めにググってみました。

 

あ、データベースにも色々とデータの種類があるのね。全く知りませんでした。

で、さっそくテスト環境に使っているテーブルの型を、MyISAMに変更。

同じように1,000個の値を持つ乱数配列で再度update_optionでデータを挿入すると…

でました。オーバーヘッド。

ひとつのキーに挿入時
ひとつのキーに挿入時

ひとつのキーに、1,000個の、乱数で作成された値をもつ配列を、シリアライズして挿入すると、

29.5 KiB (KiBって何?キロバイトじゃなくて?)

計10回、挿入してみましたが、 29.5 KiBから変わらなかったです。

なるほど。何度も値を挿入しても、値は変わらないのか。配列の値も色々と変えてみる。

 

ここまでで分かったこと

× 1回のオーバーヘッド量 29.5 KiB × 10回updateすると = 295KiB になるわけではなく、

○ 挿入するデータ量に応じて、オーバーヘッドのサイズが変わる。何度更新しても。

 

そっか。

これじゃあ何度テーブルの最適化をしても、そのupdateをする限りいつまでもオーバーヘッドするじゃないか。

 

よし。

次の検証にうつります。その前に、オーバーヘッドの最適化。

 

次は、1,000のキーとして、値を挿入。の検証

挿入するデータは以下。

 for( $i=0; $i<1000; $i++ ) {
 update_option( 'sampledata' . $i , rand( 1 , 1000000 ) );
 }

結果は。オーバーヘッドなし

確かにこの方法がいいかもしれない。

ん?ちょっとここでもうひとつ試してみることにしました。

 

update_optionの値を、ただの配列にするとどうなるか

 for( $i=0; $i<1000; $i++ ) {
 update_option( 'sampledata' . $i , array( rand( 1 , 1000000 ) ) );
 }

結果はこちら。

値を配列に変更後
値を配列に変更後

20 バイト。配列にするだけで、オーバーヘッドが起こるのか。

 

wordpress の update_option()の流れとしては(ざっくり)、

  • update_option() の値に配列やオブジェクトをつっこむ
  • maybe_serialize()という処理が入る

この”たぶん、シリアライズ機能”のほうで、

if ( is_array( $data ) || is_object( $data ) )
 return serialize( $data );

シリアライズされたデータを返し、データベースのデータが更新されます。

 

 

じゃあ、配列でupdate_optionデータを更新する限り、シリアライズされる。

シリアライズされたデータで、 データベースの型が MyISAM なら、ほぼオーバーヘッドが起こる。

(データベースの環境も左右されるかもしれませんね)

 

いい勉強になりました。

オーバーヘッドを避ける為には、1キーに1つの値。

という事ですね。

 

今公開中のプラグインは、ほとんどがシリアライズされたデータなので、いくつかは変更する予定です。

>>追記

実際には、1キー に 1つの値 にしても、オーバーヘッドを避ける事はできませんでした。

どういう事かというと…

作成したキーを、削除するだけでもオーバーヘッドが出ました。

また、コメントでbloger323さんがおっしゃる通り、データの増減が激しい場合もオーバーヘッドが出るようです。

 

うーん、どういう構造がいいんでしょうね。。

日本語と英語以外のプラグインの翻訳ファイルを作る

といっても、 gqevu6bsiz が作るわけじゃないですが。

 

昨日、announce from the dashboard のプラグインの ドイツ語の翻訳ファイルをコミットしました。

gqevu6bsiz が作っていませんよ。

”たぶんドイツ人”の、トルステンさんという方に作ってもらいました。

 

 

直接お願いをした訳ではなく、プラグインを公開しているwordpress.orgのところのレビューのほうに、

トルステンさんから「翻訳しちゃうよー」と言ってくれて、それに気づいたのが約1か月後。。。

レビュー書いてもらったらメールで通知して欲しいなぁ。
(それともその設定がどこかにあるのかな。。)

 

その返事として、「翻訳してくださいぷりーず」と返事をして、それからまた3週間後ぐらい。。

「遅くなってすまねー翻訳するからPOTファイル頂戴」と。

 

こんな感じでやりとりして、翻訳ファイルをいただきました。

トルステンさん、感謝です!(このブログは見てないと思いますが)

 

まさかこんな感じで他言語の翻訳ファイルが出来上がるとは思ってもいませんでした。

 

wordpressのプラグイン作成して配布している人で、他言語の翻訳を希望している方がいれば、

プラグインの設定ページに「誰か翻訳してください。」

と記載したほうがいいかもしれません。

(他にいい方法があれば教えてください) 🙂

 

ちなみに gqevu6bsiz はこうしています。

プラグインについての説明

プラグインの設定ページ右側に、「プラグインについて」という項目を設けて、そこで

  • 翻訳を是非お願いします。
  • ここに寄付(amazonのギフトカード)してくれたらとてもハッピーです
  • 他にブログとかレビューとかへのリンク

を案内しています。

ただ、プラグインからの寄付って全くないですね。。

amazonのギフトカードだからなのかな?

gqevu6bsizだけかな?他の人はどうなんだろう。

 

 

ただ、ひとつ思う事は、

トルステンさんからいただいた翻訳ファイル、テキストエディタで内容を確認しようと思って開くと…

そりゃそっか。ドイツ語。どうやって確認したらいいんだろう。

しかもドイツ語って何か複数あるのかな??日本語JISやEUCみたいに。。

 

結局テキストエディタではある程度しか確認が出来ないので、

ドイツ語のwordpressをローカルにインストして確認して、その部分部分をGoogle翻訳にかけて確認しました。。

 

う~ん、グローバルなテキストエディタが欲しいです。

potファイルがエラーと言われ…

どこかの海外の方のレビューから、「あなたのpotファイル、エラーあるからちゃんと調べて!」と言われたので、調べてみました。。

I tried to load your pot file with poedit but I get errors. There's something wrong.
Please can you check it!

エラーなんて。。見る限りは、ロード(多分開く)時点でエラーと書いています。

もしかして言語の違いで開かないのかなぁ。とちょっと予想してみたり。

 

さっそくダウンロードして開いてみた

結論。エラー(笑

なんてこったい。。とりあえず、直したい所ですが、どこがどうダメなんだろう。。

さて、どうやってしらべようかな。

 

有名どころのPOTファイルをダウンロードして比較してみる

ここは Contact Form 7 がいいかな。とりあえず、見てみよう。

開いてみると…「xxxx~カタログエラー~」。

ん?どういうこと?エラーが普通なのかな??

そもそも、POTファイルの使い方や編集の認識が違うのかな?

あ、待てよ。ドラッグして開くのはやめて、ちゃんと「ファイル」→「開く」でやってみようかな。

結果、

  • announce-from-the-dashboard.pot 開かない
  • wpcf7.pot 開く

そっか。ドラッグでの認識が違うんだね。確かにエラーが出ました。

エラー文は、

Failed to convert file "ファイルパス\announce-from-the-dashboard.pot" to Unicode.

おそらく、Unicodeへの変換が出来ません。的な感じかな。

でも、utf-8で編集しているはずだけど。。

 

でテキストエディタで開いて、下までドラッグしてみると…

msgid “red”
msgstr “”

msgid “yellow”
msgstr “”

msgid “metabox”
msgstr “メタボックス

なんだこれは(笑

これは、日本語じゃないですか!超凡ミス…..。

 

とりあえず、削除して編集し直し。。

で、開くかどうか試したら、、

だよね。やっぱり今はエラーも出ずに開くね。。

 

やっちまったなぁ~

とりあえず、指摘してくれた方に謝って新しいPOTファイルをダウンロードしてもらおう。

 

後は、他のPOTファイルも見てみようかな。

wordpress 記事のタイトルにはてなブックマークユーザー数を表示させる

他の人のブログを色々と見て回りました。

なんか、ブックマークユーザー数が表示されている記事って、結構目につきやすいもんだな~と思い、
このブログでも設置してみることにしました。

これがゴール

ブックマーク表示サンプル
ブックマーク表示サンプル

 

さて、どこから手をつけようか

まず、このブログのテーマはtwentytwelveを親とした、子テーマを使用しています。

そして、子テーマには実は、style.cssとfunctions.phpの2つのみ。

 

つまり、content.phpやsingle.php等は一切触ってないんです。(理由? メンドウだから…。)

 

そうなると、actionやfilterをaddする方法のみで、実装する事が前提です。

 

 

addするポイントを探す。

まず、やりたい事は、「記事のタイトル」にはてなブックマークユーザー数の表示です。

記事のタイトルを表示しているものは、content.php内

<h1><?php the_title(); ?></h1>

です。となると、add_action もしくは add_filter でthe_title にフックさせることに。

 

その前に、はてなブックマーク数はどうやって表示させんの?

ぐぐって見ると、とりあえずそれっぽいものを発見。

自分のブログに「○○users」を表示する

 

この一覧に、wordpressが無い。。まぁ、movable typeでも同じだろうということで、タグをコピペ。

 <a href="http://b.hatena.ne.jp/entry/<$MTEntryPermalink$>">
  <img src="http://b.hatena.ne.jp/entry/image/<$MTEntryPermalink$>"
 alt="はてなブックマーク - <$MTEntryTitle$>" title="はてなブックマーク - <$MTEntryTitle$>">
  </a>

あ、案外簡単だね。

<$MTEntryPermalink$> → get_permalink()

<$MTEntryTitle$> → get_the_title()

になればいいだけか。

 

ローカルでテストするまでもなさそうだ。というわけで、

 

さっそく実装してみましたが…

functions.phpに書いたコードは以下。

※注意※ 以下のタグは間違っています。

add_filter( 'the_title', 'hatena_add', 10, 2 );
function hatena_add( $title ) {
global $post;

$title .= '<a href="http://b.hatena.ne.jp/entry/' . get_permalink() . '">';
$title .= '<img src="http://b.hatena.ne.jp/entry/image/' . get_permalink() . '" alt="はてなブックマーク - ' . $post->title . '" title="はてなブックマーク - ' . get_permalink() . '" />';
$title .= '</a>';

return $title;
}

で、表示させてみると….うーん。

メニュー
メニュー

グローバルメニューにやたら縦の余白が増えたな。。と思ったら、グローバルメニューにも、はてなブックマーク数が…。

参ったな~。でもそんなにこのブログのアクセスは無いから、そんなに参らないか。

ってことで、他の方法を考えながら、管理画面からブログの記事一覧を見てみたら…

記事一覧
記事一覧

おうっ。なんか記事のタイトルにはてなのブックマークタグw

いやー。これは参った。急いでさっきのタグは外そう。

 

どこかフック場所を間違ったな。で、まず整理した。

やりたいことは、

 

記事ループ内の記事タイトルのみに、フックさせる

ってことでぐぐってみたけど、よく分からない。

ってことで、the_titleを少し辿ってみることに。

辿った限りは、get_the_title()が怪しいかな。

wp-includes/post-template.php 102行目あたり

あ、なるほど。

if ( ! is_admin() ) {

管理画面以外に絞ればいいだけの話か。

 

でもこのままだと、まだグローバルナビにブックマークユーザー数が出てしまう。

どうやって、”ループ内の記事タイトルのみ”って条件分岐するんだろうか。

うーむ。分からない。

もっと調べていると、

add_filter( 'the_title', 'hatena_add', 10, 2 );
function hatena_add( $title , $id ) {

で、ループ記事のIDが取得できるっぽい。

なので、

print_r(get_post($id));

を挿入してデバッグしてみたら、

グローバルナビのpost_typeはnav_menu_itemみたいなんで、これなら条件分岐できるっぽい。

で、色々と試行錯誤をしてみた。そして分かったことは、

できない。 よーく考えてみた。

 

<h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>

そっか。。。全く気づかなかった。

<?php the_title(); ?>

にフィルターをかけても、</a>タグで閉じられちゃうし。。。</a>の後、に入れたい。。

どう考えてもテンプレートさわらないと無理かな。。

 

うーむ、分からない。。。

続きは別の日にしよう。。

bitnamiをお使いの方で、wordpressのパーマリンクを変更すると、トップ以外がエラーになる方へ。

私は今年から、xampp → bitnami にテスト環境を切り替えてみました。

結構すっきりしていて便利です。

xamppにもともとついていたFilezillaなんてものも必要無かったし。

 

という事で、早速色々と試していたら…

パーマリンクを変更すると、カテゴリーページやらシングルページやらが、404 Not Foundになるじゃありませんか。

 

wordpressはパーマリンク変更に.htaccessを用いて機能させているので、.htaccessを見てみると、特にちゃんと書き換えてくれていて問題なし。

 

となると、、bitnamiか。。bitnamiのapacheの設定のどこをいじればいいんだろう。と四苦八苦。

もし同じ悩みの人がこの記事を読んでいたら、超うらやましいです。

だって、こっちは結構悩んだんだから。

 

[ 解決策 ]

bitnamiをインストールしたディレクトリ内の apache2/conf/httpd.conf の258行目辺り、

#
 # AllowOverride controls what directives may be placed in .htaccess files.
 # It can be "All", "None", or any combination of the keywords:
 # Options FileInfo AuthConfig Limit
 #
 AllowOverride None

この、AllowOverrideというものが、.htaccessに記載された機能を有効にするかどうか、らしいです。

なんでここを、

AllowOverride None → AllowOverride ALL

にして、apacheを再起動すると上手く動きました。

 

はぁ、なんかこういうのは、簡単になるように統一して欲しいもんだ。。