概要

なんでもCMS にはこれまで簡易的な画像リサイズモジュールが付いていましたが、もう少しイケてる感じにしようと思い作り直しました。
たとえば、
/files/Sunset.jpg という元画像があったとして、

/icache/w100/files/Sunset.jpg にアクセスすると

こんな感じで幅100pxの画像が表示されたり、

/icache/w200h200bFFFFFF/files/Sunset.jpg のように

余白を指定したカラーで埋めて固定サイズの画像を作れたりします。

一度リサイズした画像はキャッシュされるのでパフォーマンスも問題無いですし、元画像が変更されればキャッシュも更新されるようになっています。

このモジュールはなんでもCMSのモジュールからは完全に独立しているのでいろいろなところに転用できそうです。

仕様

/icache/`パラメータ指定`/`元画像のパス名` というURL形式でアクセスすると指定したパラメータのとおりに加工した画像が表示されます。パラメータの指定方法は

w120
h200
w150h150
w200h200bFFFFFF

のようになります。

  • wXXX 幅をpxで指定します。(省略可能)
  • hXXX 高さをpxでしていします。(省略可能。幅または高さのどちらかは必須)
  • bXXXXXX 余白の色を指定します。これを指定すると幅、高さ固定となります。

リンクの書き方次第で様々な大きさの画像を作り出せるので非常に汎用的で使いやすい仕組みではないかと思います。

Comments 「なんでもCMS」にリサイズ機能付き画像キャッシュモジュールを追加 はコメントを受け付けていません。


最近WebFontというものが流行ってきているらしい。通常のWebサイトでは各端末に入っているフォントをCSSで指定して使っているが、WebFontというのはフォントデータをサーバーから取得して使うしくみなのでユーザーの端末に入っていないフォントでも表示可能、また様々な種類のとても美しいフォントが用意されているといった点が大きな利点となっている。

なんだ素晴らしいじゃないかと手放しで喜びたくなるが「日本語」という壁が問題を少々複雑にしている。
英語のフォントであればキャラクタの種類が少ないのでWebでの配布に何の問題もないのだが日本語はそうはいかない。
キャラクタの種類が比べ物にならないのでフォントデータが巨大になりWebでのリアルタイムな配布に適さないのだ。
そこで日本語のWebFontを提供しているサービスではどこも「フォントのサブセット化」を行なっているようだ。
必要なキャラクターだけを組み込んだ「サブセット」のフォントデータを生成してデータサイズを小さくしようというのである。

今回ソフトバンク・テクノロジーが提供している フォントプラス を試す機会があったので感想を書いてみる。

まず、日本語のWebFontは現在のところ無料で提供されているサービスは存在しないと思われる。(英語であればGoogleWebFontなどがある。)理由はやはり上記の「フォントのサブセット化が必要」な点が大きいのではないかと思う。
フォントプラスではサブセット化の方式やPV数などで料金プランがわかれているようだ。ここではサブセット化の方式に注目してみてみると大きく2つの方式がある。

スマートライセンス

 javascriptでリアルタイムにフォントのサブセットを生成し、フォントプラスのクラウドサーバーからフォントデータを取得する形式。
 設置方法が非常に簡単(scriptタグの追加とフォント指定のみ)だが、WebFontが表示されるまでに1~2秒のタイムラグが発生するという問題がある。
 先にシステムフォントが表示され、1~2秒後にWebFontに切り替わるという見え方になる。
 これはリアルタイムにサブセットを生成しているという仕組み上しょうがない。

バリューライセンス

 事前に必要なフォントのサブセットを生成し、自社のWebサーバーに設置する形で使用する方式。
 フォント表示にタイムラグは発生しないが、CMSなど動的なページには向かない。
 (更新があるたびにサブセットを作り直す必要が出てくる。)

WebFontを使う箇所が固定文字(ex.ページのタイトルなど)であればバリューライセンスで問題ないのだが、動的なページとなるとやはりスマートライセンスでないと運用がしづらい。
しかしスマートライセンスでの見え方はそのままだとタイムラグがあるのでちょっとかっこわるい。
“スマート”に見せるにはエフェクトなどでタイムラグをごまかすような仕組みを検討しなければいけない。

バラ色の世界が広がるかに見えるWebFontであるが、こと日本語圏のWebでは今のところタイトルなどの一部の文字に部分的に使用するといった限定的な使い方が現実的なところだ。ただ、それだけでもこれまでいちいち画像で作っていた文字などをフォントで表示させられるというのはなかなか嬉しいものである。願わくば無料のサービスが登場して欲しいのだが。。

Comments WebFontの可能性と課題 はコメントを受け付けていません。


ApacheでPATH_INFO(もしかしたらクエリーも)に%2F(/をURLエンコードしたもの)が入っていると404 Not Foundを返してしまい
意図したとおりに動作しないという現象でちょっと嵌った。

解決方法は非常に簡単で AllowEncodedSlashes パラメータを設定するだけだった。

AllowEncodedSlashes On

デフォルトではOffとなっている。

Comments [tips] PATH_INFOに%2Fが入ると404 Not Found になる件 はコメントを受け付けていません。


概要

ServersMan@Disk は月額210円@10G(追加は105円@10G)という低価格に加えてLinuxサーバーにもマウントできるという面白い機能が用意されています。
ちょうどさくらのVPSの容量が少なくなってきたのでバックアップ領域としてこれを活用できないかと思い試してみました。
rsyncでコピーしたときに接続が切れてマウントできなくなるなど不安定な面もあるようですが、素晴らしいサービス設計だと思います。

インストールと設定

どうやらServersMan@DiskはWebDAVのようで、Linuxサーバーにはfuseを使ってマウントさせるようです。
まずfuseをインストールしておきます。

# yum install fuse fuse-devel

次にServersMan@DiskのLinuxクライアント(rpm)をダウンロードしてインストール。

# wget http://serversman.com/win/bin/smdisk-1.0-005.x86_64.centos.tar.gz

# rpm -ivh smdisk-1.0-005.x86_64.rpm
準備中...                ########################################### [100%]
   1:smdisk                 ########################################### [100%]

fstabにマウントの設定を追記します。

/usr/sbin/smdisk#https://webdav.disk.serversman.net/cldstg/webdav/ /mnt/smdisk fuse allow_other,umask=0000,username=xxxx@xxxx,password=xxxxxxxx,ope_src=xxxxxxx 0 0

mountコマンドでマウントさせてみます。

# mount /mnt/smdisk

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/hda2              18G   13G  3.8G  78% /
/dev/hda1              99M   12M   82M  13% /boot
tmpfs                 250M     0  250M   0% /dev/shm
wdfs (https://webdav.disk.serversman.net/cldstg/webdav/)
                       10G     0   10G   0% /mnt/smdisk

素晴らしい!あとは普通のファイルシステムとして使えそうです。
ファイルを作成してみたところ、ユーザ、グループはroot,root、パーミッションは777で作成されました。

Comments ServersMan@DiskをさくらVPSにマウントしてみた はコメントを受け付けていません。


概要

EC-CUBEはここ数年勢いを増していてかなり認知度があがってきています。2.11.4も登場してスマートフォン向けのデザインが強化されるなど、機能も充実の一途です。そんななかプログラマーを悩ませるのは、「コードが酷い」ということ。。もう少しきれいなコードだったらカスタマイズしやすいのになあ。。何度そういうため息を漏らしたことでしょう。
こういった状況を少しでも改善していきたいと、まずはDB操作のコードを楽にするためのプラグインを開発しました。
「開発した」といっても弊社で公開している Teeple2 というフレームワークのORマッパーである TeepleActiveRecord をEC-CUBE用に移植しただけなのでたいした工数はかからずにできました。
使い方はほぼ http://code.google.com/p/teeple2/wiki/DatabaseIntro こちらに書いてあるやり方と同じです。(こちらではPDOは使っていません。)
下のコードは同梱したテストケースからの抜粋ですがこんな感じでなにをやっているか一目瞭然のコードがかけます。


        $productList = Entity_DtbProductCategories::get()
            ->join('dtb_category')
            ->join('dtb_products')
            ->contains('dtb_category.category_name', 'なべ')
            ->contains('dtb_products.name', 'なべ')
            ->order('dtb_products.product_id')
            ->limit(10)
            ->offset(0)
            ->select();

        $this->assertEquals('おなべレシピ', $result[0]->dtb_products->name);

ダウンロード

こちら から。(無料でご自由にお使いいただけます。)

セットアップ方法

配布しているアーカイブは以下のようにEC-CUBEのディレクトリ構成と同じ形になっていますので、そのまま配置してください。
(実行に必要なのは data/plugin/activecube 以下のみです。)

data
  |- plugin
    |- activecube

test
  |- class
    |- activecube

次に data/require_classes.php の末尾に

require_once DATA_REALDIR . 'plugin/activecube/config.php';

と記述を追加してください。これだけで使えるようになります。

しくみ、注意点など

  • lowlevelでは EC-CUBEの SC_Query クラスを使用しています。トランザクションの制御などはこちらを使用して行なってください。本ライブラリはあくまでSC_Queryのラップであり、SQLを組み立てやすくしたり、結果セットの扱いをオブジェクト階層構造で扱えるようにしたりしています。
  • MySQL, 2.11版のみ用意しています。(私がMySQLしか使わないため。。) Postgresへの対応は少しの修正でできるのではないかと思います。
  • Entityクラスにjoinの設定があります。間違っていたり足りなかったりした場合はここを修正するとよいです。
  • Entityクラスに自由にドメインロジックを追加することができます。そのような使い方をすると便利かと思います。
  • ログはEC-CUBEのsite.logに出力されるようになっています。ログレベルを変更したい場合はActiveRecord.php の 48行目あたりを修正してください。
  • 本ライブラリはフリーで提供していますので、不具合等によるいかなる損害についても弊社では責任を負いません。自己責任でご利用をお願いします。

Comments EC-CUBEのDBを「流れるインターフェース」でらくらく操作できる「ActiveCube」を開発しました はコメントを受け付けていません。