わたねこコーリング

野良プログラマ発、日々のアウトプット

TinyMCE エディタ上で画像をアップロードしながら貼り付けられる jbimages プラグインを使ってみた

HTML 等の知識が無くても Web ページ上でコンテンツを作成・編集できる、JavaScript 製の WysiWyg エディタって便利なものがあります。TinyMCE あたりがデファクトスタンダードかと思いますが、最近これを使って画像をサーバにアップロードしながら貼り付けたいっていう要望がありまして、「でも大変だよ、ぶつぶつ」等と二の足を踏んでいたら奨められたのがこれ、JustBoil.me TinyMCE Images Plugin、略して jbimages。

なんだか便利そうですが、どうも提供元サイトにライブデモの類が見当たらないのでちょこちょこっと試してみたです。こんな感じ↓

▼ツールバーの最後に画像アップロードボタンが追加されてます
f:id:mariyudu:20131013212002p:plain

▼ボタンをクリックするとアップロード用のモーダルダイアログが
f:id:mariyudu:20131013212221p:plain

ダイアログから画像をアップロードするだけで貼り付け完了
f:id:mariyudu:20131013212607p:plain

WysiWyg エディタなのでリサイズもらくらく
f:id:mariyudu:20131013212841p:plain

うむ。いー感じです。画像アップロードは HTML5 とかじゃなくて iframe でフォームを埋め込んで実現してるので、モダンブラウザじゃなくても広く使えそう。

セットアップ手順は提供元サイトにも明記されてますが、念の為邦訳を。

  1. ここからダウンロード・解凍して出来た jbimages を、TinyMCE エディタのプラグイン格納場所( tinymce/js/tinymce/plugins/ あたりがデフォ)にコピー。
  2. jbimages/config.php 中の画像格納場所を適宜、自分の環境に合わせて書き換える。尚、この格納場所は httpd が書き込みできるようにパーミッションの設定をお忘れなく。
  3. Javascript コード中の TinyMCE 設定で jbimages プラグインを明記(これも提供元サイトにサンプルコード有)。

サーバ側のアップロード処理は、どうやら CodeIgniter アプリケーションとして実装されている模様。なので、カスタマイズもし易い…かもしれませんw

さて、これを当方のシステムに採用できるかというと、ウチのコは画像をサーバのローカルディスクに保存するだけという単純なものじゃないので、うーん、ちょっと、というか大量に手を入れることになりそうだなぁ…

DB 問い合わせ結果の配列を、主キーを配列子にしたものに組み替える for ぺちぱー

いや、ホントにもうタイトルのまんまですが。

$records = array_combine(
	array_map(function($record){
		return $record['id'];
	}, $records),
	$records
);

昔からのクセで foreach で回す関数とか書いてたけど、考えてみたら最近の PHP はクロージャ書けるのでワンライナーで出来るもんね。

apns-php のログ出力をオフにする

今年もまた、夏到来とともに修羅場カモーン!で「夏休み? なにそれおいしいの」とイタイケな Mariyudu@野良プログラマです。ご無沙汰してます。

時代の流れってやつですかね。ロートルな私にもスマホアプリ絡みの仕事がちらほら来るようになって、プッシュ通知なんてモノもすなる今日この頃です。PHPer なので apns-php を有難く使わせてもらってますが、開発から運用に切り替える際にログ出力をオフにするのってどーすんだろ? とちょっと調べたのでおすそ分けです。

ログ出力ってのは標準出力に親切に表示されるこんなやつ(↓)ですが、

Tue, 27 Aug 2013 12:17:27 +0900 ApnsPHP[7815]: INFO: Trying ssl://gateway.push.apple.com:2195...
Tue, 27 Aug 2013 12:17:27 +0900 ApnsPHP[7815]: INFO: Connected to ssl://gateway.push.apple.com:2195.

この処理は、ApnsPHP_Push の construct 時に基底クラス ApnsPHP_Abstract さんが、メンバ $_logger にインターフェース ApnsPHP_Log_Interface 実装クラスのオブジェクトであるロガーをセットして、事ある毎に実行している模様なので(長w)、早い話がこんな感じでロガーをカスタマイズすればいいんじゃないかと。

// 何もしない代替ロガークラス
class ApnsPHP_Log_Custom implements ApnsPHP_Log_Interface
{
	public function log($sMessage){}
}

$push = new ApnsPHP_Push(ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, MY_CERTIFICATION);
$push->setLogger(new ApnsPHP_Log_Custom); // 何もしないロガーに置き換え

まぁ apns-php はコンパクトなので、各自「コード嫁」で解決する問題ですが、駄記事もブログの賑わいということで。

メニューバーからサクッと Feedly 登録する Chrome 拡張「Add to Feedly」

巷を震撼させた Google Reader 終了まで10日となりましたが、Feedly 移行はお済みでしょうか。ギリギリにならないと何もしないギリギリス体質の筈なのに昨日引っ越しを済ませた自分を褒めたい@野良プログラマ Mariyudu です。

という訳で Feedly、ぼちぼち使い方を覚え始めているところなんですが、デフォルトで用意されているミニツールバーでの Feedly 登録(↓)が個人的にはナンダカナーです。

f:id:mariyudu:20130620141148p:plain

ウェブページ右下に現れるアイコンをクリックしてメニューを開いて、+ボタンをクリックして登録ページに移動、という流れですがちょっと手順が多いかなと。そもそも閲覧中のページに余計なものはあまり表示させたくないし。Pocket みたいにメニューバーからポチッと登録できないの? と探してたらイイのがありましたよ、奥さん。「Add to Feedly」という Chrome 拡張機能です。

こいつを Chrome にインスコしておけば、メニューバーのボタンクリックで Feedly 登録ページに移動してくれます(↓)。

f:id:mariyudu:20130620141814p:plain

Google Reader のブックマーク追加みたいに、その場でポップアップとかでカテゴリーに放り込めたらもっといいんですがね。バージョンアップで機能強化されることを祈りましょう。

RDS MySQL のタイムゾーン問題でもう一捻り

AWS RDS で MySQL を使ってる人の多くはご存知かと思いますが、default_time_zone が UTC のまま変更出来ないので NOW() 等の日時関数を使った時に困ったことになります。これを解決する為に、パラメタグループの init_connect に接続時のタイムゾーン変更処理を記述してやる方法が知られているようですね。ただ、細かいことですが、この方法はストアドプロシジャに依存しているので、このパラメタグループを適用したデータベースインスタンスを追加する度にプロシジャを登録しなけりゃならんってのが、ちょっとスッキリしません。

てな訳でもう一捻り。前述のストアドプロシジャの内容を関数ベースでワンライナーにして、init_connect に直に書いちゃうってだけですが(↓)。

SET SESSION time_zone = IF(POSITION('rdsadmin@' IN CURRENT_USER()) = 1,'UTC','Asia/Tokyo')

シングルクォートとか入ってて大丈夫かな? と思いましたが、今のところ問題なくいってます。

音程・テンポが自在なミニプレーヤ Vox.app を山ライオンでもそのまま使う

Lion 時代の Mac アプリで Vox.app というミニプレーヤーがあるんですが、こいつが再生の際に音程・テンポを自在に設定できるという大変有り難い機能を持ってまして、採譜時の耳コピや、曲の調を変えて音源と合わせて練習する時なんかで便利に使ってました(↓)。

f:id:mariyudu:20130526172439p:plain

それが Mountain Lion にアップデートした後から動かなくなった(再生ボタンをクリックしても反応せず)ので、開発元に行って山ライオン対応版をダウンロードしたところ、音程・テンポの調整機能が無い全く普通のプレイヤーに何故か変貌してました。さてこれは困った。何とか古いままのアプリ(自分のはver.0.2.7.1)を動かせないだろうかとあれこれ調べたら、どうやらアプリ内の libbass.dylib というダイナミックライブラリを入れ替えればいい模様。以下の手順で行います。尚、この行為はアプリケーションの内部に手を入れることになるので、予めアプリを複製してバックアップしておく等、各自の自己責任で行なって下さい。

  1. ライブラリの開発元である http://www.un4seen.com/ から、BASS Audio Library をダウンロード(自分が DL したのは ver.2.4.10)。
  2. 解凍したフォルダ内にある libbass.dylib を、ターミナルでアプリケーション内のそれと差し替える(こんなかんじ↓)
cp libbass.dylib /Applications/Vox.app/Contents/Frameworks/

さて、この便利なアプリを使って某イベントの練習練習…

RDS で MySQL の EVENT 機能を使う

AWS 上で稼働している某サービスで、MySQL データベースを EC2 インスタンス上での稼働から RDS に移行することになったんですが、その作業の過程で EVENT 機能なるものが MySQL 5.1 以降で用意されていることを知りました。こんな便利なモノがあるのを知らずにもう何年も定期処理を cron で回してたのか… と恥じ入りつつ、早速使ってみることに。ところが、RDS 版 MySQL (現在、ver.5.5)はデフォルト設定で、EVENT 用のスケジューラプロセスが稼働してない模様。これを有効にするには以下の手順で行います。

  1. AWS コンソールの RDS ページを開いて、左サイドメニューから「DB Parameter Groups」をクリック。
  2. デフォルト状態では「default.mysql5.5」ってのがひとつあるだけですが、これに直接手を入れるのもアレなのでカスタマイズ用の設定を新規追加してみます。リストの上のボタン「Create DB Parameter Group」をクリックして適宜名前を付けて保存します。その際、「DB Parameter Group Family:」で「mysql5.5」を選べばデフォルト設定と同一内容の設定となります。
  3. 新規追加したパラメタグループを選択 → リストの上のボタン「Edit Parameters」をクリック → パラメタ一覧画面に移動。
  4. パラメタ一覧表から「event_scheduler」という項目を見つけて値が空欄になっているのを確認したら、一覧表上部のボタン「Edit Parameters」をクリックして、編集画面に移動。
  5. 「event_scheduler」の値を「ON」にして、ボタン「Save Changes」をポチッと。

あとは、上記で編集したパラメタグループを当該のインスタンスに適用するだけ。新規インスタンスなら生成ダイアログの「Additional Configuration」のところで「Parameter Group:」で選択してやります。既存インスタンスなら、Modify でこれを選択しなおしてインスタンス再起動。

パラメータグループの編集→保存は、インスタンスの再起動とかなしに反映されるみたいです。即時って程でもないみたいですが、遅い場合でも数分で稼働中インスタンスに反映されました。