エントリー

確率を指定したランダム

単純なランダム表示は簡単だけど、「特定のメッセージが表示されやすいランダム」のような「確率を指定したランダム」が必要になったのでメモ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>rand</title>
</head>
<body>
<?php

$configs = array(
  array(
    'probability' => 60,
    'message'     => '60%の確率で表示されます。'
  ),
  array(
    'probability' => 30,
    'message'     => '30%の確率で表示されます。'
  ),
  array(
    'probability' => 10,
    'message'     => '10%の確率で表示されます。'
  )
);

$count = count($configs);
$max   = 0;

for ($i = 0; $i < $count; $i++) {
  $max += $configs[$i]['probability'];
}

$rand   = rand(1, $max);
$from   = 0;
$to     = 0;
$result = '';

for ($i = 0; $i < $count; $i++) {
  $from = $to;
  $to  += $configs[$i]['probability'];

  if ($from < $rand and $rand <= $to) {
    $result = $configs[$i]['message'];
  }
}

echo '<p>' . $result . '</p>';

?>
</body>
</html>

probability の値は、合計100にならなくても動作に問題はありません。あくまでも「値の大きいものが表示されやすい」というだけ。

なお、基本的な考え方は確率変更可能ランダムテキストを参考にしています。(自分が理解しやすいようにコードを書き換えましたが。)こういうのが思いつく人は凄いなぁ…。

PHPで圧縮ファイル作成(zip)

phpMyAdminの libraries/zip.lib.php を使えば、PHPのみでファイルの圧縮ができたのでメモ。

<?php

require_once 'zip.lib.php';

$zipfile = new zipfile();

//圧縮するファイルのパス
$file1 = 'test.txt';
$file2 = 'test/test.jpg';

//ファイルを追加
$zipfile->addFile(file_get_contents($file1), $file1);

//ファイルを追加
$zipfile->addFile(file_get_contents($file2), $file2);

/*
//ZIPファイルを作成する場合
if (file_put_contents('test.zip', $zipfile->file()) === false) {
  exit('error');
}
*/

//ZIPファイルをダウンロードする場合
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="test.zip"');
header('Content-Length: ' . strlen($zipfile->file()));
echo $zipfile->file();

exit;

?>

HTTP_OAuth_Consumerでの認証エラー対策

TwitterでOAuthを行うPHPプログラムを書く場合、HTTP_OAuth_Consumerクラスを使って

$consumer = new HTTP_OAuth_Consumer('CONSUMER_KEY', 'CONSUMER_SECRET');
$consumer->setToken('TOKEN');
$consumer->setTokenSecret('TOKEN_SECRET');

$response = $consumer->sendRequest('http://api.twitter.com/1/statuses/user_timeline.xml?include_rts=true&page=1', array(), 'GET');

$xml = simplexml_load_string($response->getBody());

print_r($xml);

のように処理していたのですが、6月7日から急に「This method requires authentication.」というエラーが返ってくるようになりました。

なかなか原因が解らなかったのですが、sendRequestでデータを送受信する際に

$response = $consumer->sendRequest('http://api.twitter.com/1/statuses/user_timeline.xml', array('include_rts' => true, 'page' => 1), 'GET');

とするとエラーにならなくなりました。引数を ? に続けて渡さずに、別途 array() で渡すように変更しています。

? に続けて引数を渡すのは非推奨な方法で、6月7日に非推奨な方法を廃止したのかなぁ…と思いますが、原因は不明です。「ページ送り機能が削除されて、APIが使い物にならなくなった。」とか思っていたのですが、そうではなくて良かった。ヽ(;▽;)ノ

はじめてのPHP

唐突ですが本を書きました!

はじめてのPHP

本の内容は、基本的にはPHP入門と同じ。というか、本を書くために加筆修正して、最終的には元々の内容と比べて倍くらいになりました。(^^;

最初にPHPの入門書を書く話をもらったとき、「PHP入門の内容をベースに書く」「サイトの解説は公開終了にしない」「もちろんサイトの解説の権利を譲渡したりもしない」なら書きます!で請けてみた。 ベースができているとは言え、加筆修正してから書籍用に文章を調整して…とかやっていたら、結局4ヶ月くらい書いてた。ちなみに書き始めたのは今年のはじめ。
本当はもう少し早く出版されるはずだったらしいけど、震災の影響で色々混乱していて遅れたらしい。

正直「今新たにPHPの入門書を出版しても、そんなに需要はあるかなぁ…」と思ったりはする。でもやっぱり、一度は本を書いてみたいとは思うわけで。

ちなみに今まで本について一切触れなかったのは、「何かあって出版が流れたら、カッコ悪い事この上ないな…」とか思っていたから。((((;゜Д゜)))

そんな訳ですが、よければどうぞ。(。╹ω╹。)

水樹奈々「深愛」をピアノで弾いてみた

ピアノが3年間続いた記念に、演奏動画をアップロード。

YouTubeやニコニコ動画の奏者への憧れもあってピアノをはじめて、「3年間続いたら動画をアップロードしよう」と思っていたことをついに実行。(「石の上にも三年」という言葉があるので、3年続ければ少しは聴けるものになるかなぁ…で3年にした。)

「両手を別々に動かすのって難しい」レベルから3年間ずっと続けて、とうとう当初の目標を果たすことができたので感慨深い…。
まだまだ拙い演奏だけど、それでもいつか弾きたいと思っていた曲を弾けて満足。

ミスタッチは何度もしているのだけど、何とかペースを落とさず通して弾くだけでも、自分のレベルでは結構大変だったり。テンポの速い曲だし。
ちなみに、この動画を撮るのに50回くらいリテイクしているので、毎回こんな風に弾けるわけでもないです。そして本番に弱い。

あと、動画撮影は騒音との戦いだった…。調子よく弾いているときに電話がなったりすると…。(´;ω;`)

これからも、半年ごとくらいに演奏動画をアップロードしていけたら…というのが次の目標。(`・ω・´)

ネタバレボタン

  • 2011/05/21 17:01

時々要望をもらっていたネタバレボタンを、jQueryのプラグインとして作成してみた。

ネタバレな内容などを書くときに便利です。

導入方法の解説を書いたら、公開したいと思います。

携帯メールから投稿テスト

メール投稿機能を改良中。件名を空欄にしたら、新規の記事にせずに最新の記事に追記するようにしてみた。

同じ日に何度もメール投稿する場合、この形式の方が良さそう。

17:33

携帯メールから追記テスト。

17:42

20110512174221.jpg

添付ファイル。

17:46

20110512174608.JPG

iPhoneからテスト。
ファイルも添付。

17:48

iPhoneから添付ファイルなしで送信。

Twitterでの一部の発言をサイドバーに表示

少し前からTwitterには鍵をかけていますが、freoに関するツイートのみブログのサイドバーに表示するようにしてみた。更新情報とか簡単な返信とかは、ここに書いていこうと思います。

ちなみに仕組みは、

  • Twitter API で発言を取得してデータベースに保存
  • データベースから特定のキーワードを含む発言を表示

となっています。鍵を書けたアカウントでも一部の発言のみを公開できるので、それなりに需要のある仕組みかも。

設置が少しややこしいのが難点だけど。(´・ω・`)

iPhone対応

freoをiPhoneに対応させたので、テストを兼ねてiPhoneから投稿。iPhone経由でインターネットを利用する時間が増えつつあるので、対応できて満足。(。╹ω╹。)

自分で使いつつ、不便な点は調整して行きたいと思います。

追記1

複数の方から「更新履歴に libs/freo/version.php の更新を書き忘れている」と教えていただきました。現在は加筆済みです。m(_ _)m

追記2

一つ前のエントリーにも掲載した、iPhone用に画像サイズを調整するJavaScriptが動作していないというご意見がありました。
再現できていないですが、URLをお知らせいただければ調べてみます。

追記3

追記2の不具合は、配布ファイルに js/jquery.autoresize.js を含めるのを忘れていたからでした…。自分の環境では以前から配置済みだったのでエラーにならず、エラーメッセージを送ってもらうまで気付きませんでした…。

バージョンアップして修正しておきました。

iPhone対応作業中

freoをiPhoneに対応させるために作業中。ある程度できたので、後は実際に使いつつ調整していくとします。

本文の画像がiPhoneのウインドウ幅より大きいとレイアウトが崩れる問題に頭を悩ませていたけど、JavaScriptで

$('img').removeAttr('width').removeAttr('height');
$('img').css('max-width', '300px');

とするようにしてみた。もともとの幅と高さの指定を削除してから、「最大300px」というCSSを追加。これでしばらく様子を見てみるとします。

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed