各メーカーごとに書くとこんな感じです。
]]> a-one(エーワン)フォーマット番号:F44A4-1
商品名:ラベルシール[プリンタ兼用] マット紙・ホワイト A4 44面 四辺余白付 とか
品番:28368 / 28388 / 28648 / 28943 / 28944 / 28946 / 30113 / 30116 / 31165 / 31262 / 31268 / 31350 / 31516 / 31567 / 51467 / 72244
用紙サイズ / 面数:A4 / 44面
ラベルサイズ:48.3X25.4mm
商品名:A4タックシール 44面 連続給紙タイプ とか
品番:GB901 / OP901
用紙サイズ / 面数:A4 / 44面
ラベルサイズ:48.3X25.4mm
商品名:インクジェットつやなしマットラベル(44面) とか
品番:LB-EJM09 / LB-EM19 / LB-EM19-1 / TA-GLP44
用紙サイズ / 面数:A4 / 44面
ラベルサイズ:48.3X25.4mm
商品名:IJPラベルはかどり44面四辺余白付 とか
品番:KJ-E80943 / KJ-E80944 / LBP-E80388 / LBP-E80368 / LBP-E80648 / KPC-EF85
用紙サイズ / 面数:A4 / 44面
ラベルサイズ:48.3X25.4mm
商品名:リラベルはかどり44面 とか
品番:EDT-M44 / EDT-TI44 / EDT-TM44
用紙サイズ / 面数:A4 / 44面
ラベルサイズ:48.3X25.4mm
今度テンプレート配布サイトでもやろうかな。。。
テンプレート(F44A4-1 / 48.3X25.4mm 44面)
Illustrator用テンプレートのダウンロードはこちら!
Twitterにも書きましたが、大事なことなのでブログにも書いておきます。
現在、Mooterというサイトで提供されているブログパーツ「Mooterフリー検索」に含まれるJavascriptのコードが改ざんされており、このコードを含むサイトを閲覧するだけでAdobe Reader および Adobe Acrobatのゼロデイ攻撃を引き起こすPDFファイルをダウンロードしてしまいます。
配布ページは以下URLになりますが、この配布ページ自体にも該当コードが含まれているため、安易にアクセスすると非常に危険です。
ttp://tools.mooter.co.jp/searchbox.html
これは以下サイトで解説されているものと同じと思われます。対策方法も記載されているので、一読の上、対応をお願いします。
新手の正規サイト改ざんでAdobe Readerのゼロデイ攻撃~今すぐ対策を
ちなみに僕はまんまと感染しました。明日はOS入れ替え作業です。。。
]]>昨日、ついにsymfonyの1.4がリリースされましたね。1.0同様、3年間の Long Term Support ということで、今後しばらくは1.4で落ち着くのかなぁ。。。と感じてるところです。
さて、symfonyでフォーム(sfForm)を作っていて常々感じるのは、POSTされたデータをそのままバリデートするのではなく、せめてmb_convert_kanaでフィルタ(正規化)した後にバリデートしたい、ということです。PEARのHTML_QuickFormでいうところのapplyFilter()の機能ですね。
ただしsfFormには上記のようなフィルタ機能がありません。そのため、私は既存のsfValidatorStringを継承して以下のカスタムバリデータを使ってます。symfony 1.2 で動作確認していますが、コードを見る限りでは1.3, 1.4でも問題なく使えるはずです。
]]> サンプルコード<?php /* * This file is part of the symfony package. * (c) Fabien Potencier <fabien.potencier@symfony-project.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * sfValidatorStringKana validates a multibyte string. * * @package symfony * @subpackage validator * @author Yoshinori Ishii <ishii.yoshinori@itra.jp> * @version SVN: $Id$ */ class sfValidatorStringKana extends sfValidatorString { /** * Configures the current validator. * * Available options: * * * convert_option: Convert option for mb_convert_kana() * * @param array $options An array of options * @param array $messages An array of error messages * * @see sfValidatorString */ protected function configure($options = array(), $messages = array()) { parent::configure($options, $messages); $this->setOption('trim', true); $this->addOption('convert_option', 'asKV'); } /** * @see sfValidatorBase */ public function clean($value) { if ($this->hasOption('convert_option')) { $value = mb_convert_kana($value, $this->getOption('convert_option'), $this->getCharset()); } return parent::clean($value); } }
上記のコードをsfValidatorStringKana.class.phpとしてlib/以下にファイルを配置すればインストールは完了です。
フォームクラスからの呼び出し方は以下のサンプルの通り、sfValidatorStringとほぼ同じです。convert_optionはmb_convert_kanaの第2引数に渡す変換オプションです(デフォルトで'asKV'が設定されています)。
$form->setValidators(array( 'name' => new sfValidatorStringKana(array( 'min_length' => 4, 'max_length' => 50, 'convert_option' => 'asKV', // mb_convert_kanaの変換オプション )), ));
あえてclean()をオーバーライドした理由は、sfValidatorBase::clean()で行われるデフォルトのバリデーション(trimや必須チェック)の前にフィルタリングを行いたかったからです。
例えば全角スペースのみを含む文字列がPOSTされた場合、doClean()をオーバーライドしただけだと、trimと必須チェックをすり抜けてしまうため、フィルタの意味を成さなくなってしまうのです。ここのところ、文字だとちょっとわかりづらいので、図でまとめてみました↓
他にも使いまわしがききそうなカスタムバリデータを作ってる方がいらっしゃったら、コメントなどで教えてもらえるととてもうれしいです。
]]>Twitterアカウントを持っている人なら一度は見ているであろう、設定完了画面で出てくる「ありがとう。設定を保存しました」や「これはいい画像ですね!」のUI。
ページ表示時にベロンと出てきて、一定時間が経過したらスルスルと消えていく例のアレですが、ユーザへの通知手段として非常にわかりやすいなあと思いませんでしたか?ためしてみたら意外とカンタンに実装できたので、実装方法をまとめてみます。
]]> 用意するもの今回は jQuery 1.3.2 と timer プラグイン 0.1.0 を使いました。timerプラグインは1.1.xもしくは1.2.xに対応してるよ「It's for jQuery (1.1.x and 1.2.x)」と記載されていましたが、1.3.2でも問題なく動作しました。
通知したい部分のブロック要素を<body>タグの直下に配置します。このときブロック要素(#notification)に直接メッセージを書くのではなく、内部ブロック要素(.message)にメッセージを入れるほうが細かいレイアウトがしやすいのでオススメです。
(略) </head> <body> <div id="notification"> <p class="message">これはいい画像ですね!</p> </div> <div id="wrapper"> (略)
通知したい部分のブロック要素は、display:none;が設定されているのがミソです。
#notification { display: none; position: absolute; top: 0; left: 0; width: 100%; background: #eee; } #notification .message { width: 880px; margin: 0 auto; padding: 15px 10px; font-size: 140%; }
読み込みが完了した直後に表示→一定期間そのまま→再度非表示 は以下のコードで。
// 読み込み完了直後に実行 $(document).ready(function(){ notification('#notification'); }); // メッセージ通知を表示 function notification(element) { $(element).slideDown('fast'); $.timer(5000, function(timer){ $(element).slideUp('fast'); timer.stop(); }); }
おさらいすると、以下のような流れです。
※$(document).ready() の部分は <body>タグのonloadイベントを代用しても動作すると思います。
ひょっとしたら3分かからずに実装できてしまうので、ぜひお試しを。
ベタ書きされたFlashなら表示されるのに、 なぜかswfobject.embedSWF() で埋め込んだFlashが表示できなくなった。
セーフモードなら問題なく表示されるので、40個以上入ってるアドオンをしらみつぶしに調べてみたら。。。Page Speed、おまえだったのか。
どうやらFirefox 3.5.3 / Firebug 1.4.3 / Page Speed 1.3 の組み合わせでFlashコンテンツが表示されないというバグが発生する模様。
しばらくYSlow使うか。。。
2009/10/20 追記
とか書いてから、24時間後にはすでにチケットがClosed になってました。Page Speedのバージョンも1.3.0.1 にあがったみたいです。ためしにバージョンアップしてみたところ、swfobject 動きました!ありがとうございます>中の人
]]>Aug 20 11:03:01 hostname crond[2883]: ([削除したユーザ名]) ORPHAN (no passwd entry)
ORPHAN = 孤児
という意味らしく、どうやらユーザは存在しないけどcrontabが残ってるよ、という意味のようだ。動作はしないだろうけど、なんだか気持ちが悪い。この対処方法としては
/var/spool/cron/[削除したユーザ名]のファイルを削除する。
これだけでいいよ。
]]>ある日突然日付変更が使えなくなったため、ヒマを見つけてはボチボチ情報収集してたんですが有効な手がかりが得られず。でも、こちらのブログでようやく解決方法が見つかりました!
Be bow 6 α: FirefoxでGoogle Analyticsの期間の選択ができなくなったときの対処方法
]]> この記事によれば、どうやらウェブページのスクリーンショットを撮るためのアドオン「Pearl Crescent Page Saver Basic 2.0.1」が悪さをしてた模様。さらに手元のPCで試してみたところ、アドオンを無効にせずとも解決することができました。Firefoxから[ツール]→[アドオン]→[Pearl Crescent Page Saver Basic 2.0.1]→[設定]と進み、
「Webページの読み込み時にFlashのコンテンツも取得」にチェックを入れてOKボタンを押し、再度Google Analytics を読み込めば正常に出てくるようになりました!わーパチパチ。
2009/01/14に最新バージョンの2.0.1が出たようですが、おそらくこのバージョンにアップデートすると同じ現象が起こってしまうのではないかと思います。
このチェック項目はデフォルトでOffになってるため、同じような境遇に悩んでる方は非常に少ないと思いますが、
のいずれにも該当する方は、一度設定を見直してみたほうがよいかもです。
※チェック入れといたほうが、Flashも取り込めてラクなんだけどな...
]]>PHP5.2.8 にバージョンアップしたら、 Mojavi3 で警告が出るようになりました。
Warning: fclose() [function.fclose]: 37 is not a valid stream resource in \path\to\mojavi\config\ConfigCache.class.php on line 408
今回はこれを抑制する方法。
]]> コードを見てみると、mojavi\config\ConfigCache.class.phpでopendir()で取得したハンドルをfclose()で閉じようとしているのが原因だったので、fclose()をclosedir()に修正するだけでOKです。Sean Kerr 氏の凡ミス?// close file pointer fclose($fp);
↓
// close file pointer closedir($fp);
// close file pointer fclose($fp);
↓
// close file pointer closedir($fp);
キャッシュファイルの生成時と消去時とで関数が異なるため、修正箇所は2箇所になりますが、どちらも直しておけば問題ないです。手元の環境ではPHP5.2.6までは問題なく動作してましたが、PHP5.2.8にバージョンアップしたとたんにWarningを吐くようになりました(コチラの方が動作としては正しい)。
Mojavi3で動いてるシステムはまだあると思いますが、PHPをバージョンアップしたらフレームワーク内からWarningが出た、という時は参考にしてみるといいかもです。
ああ、いっそsymfonyでリプレースしたいなぁ...
]]>こんな感じにランダムに並んだ色のセルを、マウスのドラッグ&ドロップで色の順番に合わせて配置換えをするだけ。終了後に「Score Test」ボタンを押せば、自分がどれだけ正しく配置できたか(もしくは間違っていたか)を教えてくれます。点数は0点に近づけば近づくほどいいみたいです。
]]> 詳しい説明や使い方はコチラ気になるテスト結果は・・・
1回目
デュアルディスプレイのメインモニタで実施し、16点。「お、俺デザイナじゃないし、別にいいんだもんね!」とちょっと言い訳してみる。
2回目
デュアルディスプレイのサブモニタで実施し、0点。小さくガッツポーズ。
どちらも同じ条件かつ同じ型番のモニタ(LG製L206WTQ-BF、色設定はいじったことなし)なのに、1回目と2回目を比較すると2回目の方が色の差異がはるかにわかりやすかった。
1回目のときは「あ...これどっちかな?」と悩む場面が多かったけど、2回目のときは「これは明らかに右に置くべきじゃね?」というのがわかったし、そもそも悩む回数がかなり少なかった。
「安物モニタは色表現の個体差が大きい」というのは聞いたことがあったけど、「普通に見えてれば安いのでいいんじゃね?」という性格なもので、正直なところ今まで気にしたことはなかった。だけど、こうやって数値化してくれたおかげで初めて「ホホーやっぱ安物は安物なんだねぇ」とあらためて実感することができたので、ちょっとうれしい。
ここまでわかりやすく見せられてしまうと、このサイトを『デザイナさんの質を定量評価するためのツール』として使う企業が出てきてもおかしくないんじゃないかな。
]]>日々増え続けているISOファイルを、ようやくこれで1台にまとめることができることができる。うれしいなあ。
1.5TBだと、実際に使える容量はこんな感じになるのかな?
1.5TB x ( 1000 x 1000 x 1000 x 1000 ) ÷ ( 1024 x 1024 x 1024 x1024 )
≒ 1.364T
≒ 1364GB
って、えええええ!!!
実質136Gも足りなくなっちゃうのかぁ~~
今使ってるHDD容量1個分と同じだけ減ると思うと、なんか複雑...
※なぜ容量が減るかについては↓参照
]]>"俺たちはSwift Mailerが使いたいんじゃない、PHPMailerが使いたいんだ"
"俺たちはSwift Mailerが使いたいんじゃない、PHPMailerが使いたいんだ"
"俺たちはSwift Mailerが使いたいんじゃない、PHPMailerが使いたいんだ"
...symfonyのメール周りで悩んでる(日本語圏の)人の多くが思っていそうだった。
ということで、おやぢ組さんの jpMailPlugin をベースにsymfony1.1.5に対応して作ってみたプラグインはこちら。パッケージ方法がよくわからないので、とりあえずアーカイブで。
※制限事項として、メール処理を一つのモジュールに集約した場合しか動作確認してないというのがあります。
以下、アプリケーション名をfrontend、メール関連モジュールをmailとしてざっくり解説してみます。
plugins以下にjpMailPluginディレクトリを作って展開。
all: controller: class: sfFrontWebJpMailController
all: is_internal: on ← 必要であればこれも view_class: jpMail
all: has_layout: off
public function executeIndex($request) { $this->getController()->sendEmail('mail', 'index'); }
public function executeIndex($request) { $this->hoge = 'ほげ~'; $this->mail = new jpMail; $this->mail->initialize(); $this->mail->setFrom('info@example.com', '山田 太郎'); $this->mail->setSubject('お問い合わせありがとうございました'); $this->mail->addAddress('info@example.net', '山田 花子'); }
メール本文がここに。 変数が使える。 <?php echo $hoge ?> パーシャルも。 <?php include_partial('signature') ?>
$sf_symfony_lib_dir/plugins/sfCompat10Plugin/confg/config.php から必要そうな箇所だけ持ってきました。
<?php // register config handler for config/mailer.yml files sfProjectConfiguration::getActive()->getConfigCache()->registerConfigHandler('modules/*/config/mailer.yml', 'sfDefineEnvironmentConfigHandler', array('prefix' => 'sf_mailer_', 'module' => 'yes'));
おなじみのmailer.yml。apps/frontend/modules/mail/config/mailer.ymlでオーバーライドできます。
default: deliver: on mailer: smtp domain: localhost.localdomain hostname: localhost port: 25 username: '' password: '' wordwrap: 0 .headers: priority: 3 content_type: text/plain charset: iso-2022-jp encoding: 7bit
sfFrontWebController から sendEmail() だけオーバーライドしました。
に対応してます。
2つめのやつが厄介でしたが、sfWebResponseを見る限りではメール送信処理中のみsf_testをtrueにすればHTTPヘッダが出ないようなので、トリッキーですがgetPresentationFor() の間だけsf_testをtrueに設定するようにしてみました。
根本的な解決策はmailモジュールのときだけresponseオブジェクトをsfWebResponse以外のものに変えることでは?と思いはしたものの、factories.ymlでモジュールごとにresponseオブジェクトを変える方法がわからず...そもそもモジュールごとに変えられるような設計じゃないような気も...
<?php /** * * @package jpMail.plugin * @subpackage controller * @author Yoshinori Ishii <ishii.yoshinori@itra.jp> */ class sfFrontWebJpMailController extends sfFrontWebController { /** * Sends and email. * * This methods calls a module/action with the sfMailView class. * * @param string $module A module name * @param string $action An action name * * @return string The generated mail content * * @see sfMailView, getPresentationFor(), sfController */ public function sendEmail($module, $action) { if (sfConfig::get('sf_logging_enabled')) { $this->dispatcher->notify(new sfEvent($this, 'application.log', array('sendEmail method called'))); } $sf_test = sfConfig::get('sf_test'); sfConfig::set('sf_test', true); $retval = $this->getPresentationFor($module, $action); sfConfig::set('sf_test', $sf_test); return $retval; } }
PHPMailerがゴソっと入っています。class.pop3.phpはいらないかな...
symfony1.1.5の $sf_symfony_lib_dir/plugins/sfCompat10Plugin/lib/view/sfMailView.class.php の 'sfMail' を 'jpMail' に変えてコメントをいじりました。
jpMailPluginのものをそのまま持ってきました。
$sf_symfony_lib_dir/plugins/sfCompat10Plugin/lib/sfMail.class.php のものをそのまま持ってきました。
個人的にはjpMailPluginの新バージョンの元ネタにでもなったらいいなと思っています。が、ライセンス的なものを全く考慮せずにいろんなところからコードを持ってきているので、コレやっちゃダメなどとご指摘いただけると助かります。
また、symfonyの作法的にNGだろ、という事をやってましたら教えて頂けると助かります。
]]>事前準備として、秘密鍵とCSRとSSL証明書を入れるディレクトリを作っておく。
$ su - # cd /usr/share/ssl # mkdir {key,csr,crt}]]> 秘密鍵の生成
とりあえずコレ作らないとはじまらないです。
# openssl genrsa -des3 -out ./key/hostname.key 1024 Generating RSA private key, 1024 bit long modulus ..++++++ ..........++++++ e is 65537 (0x10001) Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力 Verifying - Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力
Apacheとかで使う。ご利用は計画的に。
# openssl rsa -in ./key/hostname.key -out ./key/hostname.nopassword.key Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力 writing RSA key
秘密鍵で設定したパスフレーズを入力する必要あり。
# openssl req -new -key ./key/hostname.key -out ./csr/hostname.csr Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:JP State or Province Name (full name) [Berkshire]:Tokyo Locality Name (eg, city) [Newbury]:Shibuya-ku Organization Name (eg, company) [My Company Ltd]:Hoge Inc. Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:www.example.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Common Name の箇所は、SSL証明書を発行したいドメイン名ではなく、FQDN名を入れる。うっかりすると使い物にならない証明書を発行してしまうこともあるので注意。
無事SSL証明書が発行されたら、crtディレクトリに入れる。必要であれば中間証明書も入れちゃっていいのではないかと。
]]><pre>、もしくは<textarea>で。
<pre name="code" class="html"> ... some code here ... </pre>
<textarea name="code" class="html"> ... some code here ... </textarea>]]> ハイライトする言語の指定 どの言語でハイライトするかをclass="html"などと指定する。 オフィシャルドキュメントはこちら http://code.google.com/p/syntaxhighlighter/wiki/Languages
classにコロン(:)区切りで指定すれば、表示内容を変更できます。
<pre name="code" class="html:nogutter"> ... some code here ... </pre>
<pre name="code" class="html:nocontrols"> ... some code here ... </pre>
<pre name="code" class="html:collapse"> ... some code here ... </pre>
※nocontrolsとcollapseを同時に使うと何も表示されないので注意
<pre name="code" class="html:firstline[10]"> ... some code here ... </pre>
<pre name="code" class="html:showcolumns"> ... some code here ... </pre>
表示方法変更に関するオフィシャルドキュメントはこちら
http://code.google.com/p/syntaxhighlighter/wiki/Configuration
AddHandler server-parsed .html
って書く。
使えないと思いこんでたから、擬似的にSSIを読み込むPHPスクリプト書いたばかりだってのによう...
]]>無料だから とつい気軽に試してみたくなる気持ちはわかるけど、名刺、ゴム印ともに明らかに利益度外視の価格設定。利益を出すことが目的ではなく、集客(=顧客リスト作成)のみを目的としたフロントエンド商品で、注文したら色々なバックエンド商品(社名から察するに印刷関係のサービス?)をお勧めしてくるんだろうなあと想像していた。
だけど社名でググってみたら「連日胡散臭いメールが来るようになった」というのが見つかったので、以下のようなビジネスモデルなんだろうか、と勝手に想像。
]]>気になる商品の品質については、(オンライン注文ならではの仕様制限こそあれど)決して否定的な意見だけではないみたいなので、安く作りたい人にとっては何の問題もないと思う。
だけど、今のところウェブシステムの品質(セッション処理あたりにバグがあるみたい)やプロセス料(=原価?)といった理解しづらい追加発生料金への説明不足、日本市場へのローカライズ対応(紙のサイズとか納期とか)などの点で問題があるみたいなので、ここらへんが気になる人はもうちょっと様子見しといたほうがよさげな感じがします。
営利企業がやってることなんだから、「無料」や「激安」の裏には必ずといっていいほどバックエンド商品が待ちかまえていることを肝に銘じておきましょう。
それでもVistaPrintが気になる方は、コチラからどうぞ。
参考:
]]>