preload
2月 24

ブログを引っ越しました

Uncategorized コメントは受け付けていません。

ブログ Persistence is Power を、こちらのサイトに移管しました。

長らく Livedoor Blog にてお世話になってきましたが、さくらのレンタルサーバで使用できるディスク領域がいつの間にか増えていて、だいぶ余裕ができたので、こちらに持ってくることにしたのでした。

以前のエントリは、すべてこちらに移管しました。DNS もこちらのサーバに向けましたので、1 ヶ月ほどしたら Livedoor Blog の方は削除してしまおうと思っています。

ブックマークや検索エンジンなどで、旧サイトへたどり着いた方には、ちょっとご不便をおかけしてしまいますが、サイト内検索などをご利用いただければ幸いです。あと、データ移行時に、記事内のソースコードのインデント情報が消失してしまったり、サイト内リンクがリンク切れになってしまったりしてます。ごめんなさい。たぶん、そのままです。

ではでは、こちらでもよろしくお願いいたします。

10月 31

@東京ステーションコンファレンス。本日1日目は諸事情あり十分な聴講時間がとれなかったこと&明日2日目は行けそうにない事から、今日聞けた中で一番面白かった Ameba(アメブロ) の話のメモをとりあえずポストしておきます。スピーカーはサイバーエージェントの岡田さん、大黒さん。


セッションのメモは以下に転記しますが、講演の内容は、2006 年以降アメブロで行われた Oracle => MySQL 移行の苦労話や、増大する PV (月間50億PV!) による負荷対策の取り組み、各種ストレージエンジン x ファイルシステムの組み合わせでのパフォーマンス検証結果、自作サーバによる各種ディスク構成でのパフォーマンス検証結果などなど、といったところでした。


率直な感想としては、けっこう生々しくて濃いセッションでした。サイバーエージェントさんが社内の研究開発で、ここまで面白そうな事をやられてるとは存じ上げなかったので、そちらも驚きました。プレゼン資料や動画については、後日公開されると伺いましたので、興味のある方は、サイバーエージェントさんサイトとか、このプレスリリース周辺をウォッチしておくと良いかも知れません。


以下、メモ。

  • 組織の話
    • 「新規開発局」以下の組織体系。プロデュース、フロントクリエイティブ、システムクリエイティブ、インフラテクノロジーの 4 区分
    • インフラチームは、更に、インフラの統括的なところと、ネットワーク、DB の 3 区分
    • DB チームの業務は DB に関わる部分全般。監視やら、パフォーマンス改善、研究開発や DC でのラックマウント作業も
  • Oracle からの移行の話
    • 2006 年 9 月時点では Oracle x 2 での Active/Stanby – 月間 4 億 PV
    • 2008 年現在は Oracle x 4, MySQL シングルマスタ x 1 + レプリケーション 41 台。Oracle で管理していたブログ記事や、コメント、トラックバックのレコードを MySQL に移行
    • MySQL への移行前(中?)も、ページの一部(サイドバーとか)へのキャッシュ導入、WebLogic から Apache + tomcat への移行、NFS マウントから WebDAV への移行などのチューニングは、いろいろやっていた
    • MySQL へ移行するにあたって、レコード数の多いデータ(ブログ記事とか 80 百万レコードくらいあったとか)は –replicate-do-table しつつサーバ/テーブルを分割。最終的に月間 50 億 PV 捌けるようになったとか
    • Oracle からのデータ移行は、ダンプしたやつを scp とかで運んで LOAD DATA INFILE するのが速い。
    • 移行ツールが一見ラクそうだが、やってみるとアプリ側の処理がボトルネックになってるようだった。LOAD DATA INFILE で 2 億件ほどのレコードを 4 時間で移行できた
    • DB を変えるにあたって、DB に適したシステム設計にできるよう、UI 側のデザイン見直しにも積極的に関与したとか。ブログ管理画面に年月タブを表示したり
    • INDEX の見直し、クエリの見直し、explain での確認を丁寧にやった
    • 最終的に、一画面表示の際の、参照系のクエリ発行回数は増加したが、ディスクの I/O はかなり軽減し、スケールアウトしやすい構成にできた
    • 現在の構成で 35000-40000 クエリ/分くらいだが、60000 クエリくらいまでは行けそう
  • ストレージエンジン x ファイルシステムの比較検証の話
    • 開発では CentOS 4 系、ファイルシステムに ext3、DB に MySQL 4.1 系 MyISAM 利用がスタンダードになっていた。
    • サイバーエージェントでは MyISAM が好まれている。テーブルロックはテーブル分割で回避できているし、InnoDB は運用時の扱いにくさもあるので避けられているとか
    • 一部 MySQL 5.1 を採用したサービスもあるが、もっといい組み合わせが無いかと、いろいろ試してみた
    • ext3, xfs, zfs の比較。OS が異なるため厳密な比較はできなかったが、ext3 < xfs で xfs のスループットが 1 割ほど良い結果が得られた。zfs はチューニング次第で ext3 レベルまで持っていけるかも
    • xfs は journal log 周りにチューニングの余地があり、まだ伸びしろがありそう
    • MyISAM, InnoDB, Maria の比較。InnoDB は想定ほど悪くはなかった
    • 組み合わせ的には xfs + MyISAM がもっともよさそう
  • 自作サーバの話
    • 自身で機器選定してサーバ構築&パフォーマンス検証。ハードウェア構成検証、スキルアップ、コスト削減のための取り組み
    • HW-RAID, SW-RAID, SSD によるディスク構成比較
    • HW-RAID なかなかよい。SW-RAID は I/O が増大してくると不安定に。SSD は読み込みは抜群に高性能だが、書込みパフォーマンスが悪い

ブログアプリってことで、参照系アクセスが多いんでしょうね。50 億 PV でも、シングルマスタ& MyISAM テーブル分割で回避できちゃうんだなあ。いや、もちろん、言うほど簡単じゃないんだろうけど。しかし 41 台レプリケーションで LAN 内ネットワークトラフィックは問題にならないんだろうかとか思ってたら、その辺の議論も質疑で交わされてて、そちらも参考になりました。いまんとこ、ネットワーク側はそんなに問題になってないとか。うんー、勉強になりましたです。


なお、上記メモ後半部分の、サイバーエージェントさん社内研究成果については、コンファレンス会場の展示会場ブースで見せてもらう事ができます。他のテーマも含め、いろんなネタがファイルされていたのですが、こういう研究活動のアウトプットがしっかりまとめられているという体制/仕組みもすばらしいなあと思ったのでした。


以上です。一部理解が追いつかなかったところもあり、正確にメモできてるかは微妙です。すみません。なんかオカシイんじゃねえかとおもうところとか、訂正とか指摘いただける方は、コメントとかで教えてください。


ちなみに、明日はニフティさんココログの PostgreSQL => MySQL マイグレーション事例紹介セッションがあるそうです。こちらも聞いてみたいのですが、行けそうにないので、誰かレポートしてくれるとうれしいです。

Tagged with:
7月 29

W51CAからW62CA(G’zOne)に機種変更した

Uncategorized コメントは受け付けていません。

ここのところ、請負案件から派生してる研究活動が多いので、イマイチネタが放出できてなくてアレです。まあ、今に、書ける段階になれば、書ける範囲で公開していきます。


とか言って、何も書けないのもつまらんので、最近機種変更した au の新機種についてダラダラ書こうと思います。W51CA(黒) から W62CA(G’zOne)(白) に機種変しました。使い始めて一週間くらい経ったので、宣伝でも批判でもなく、僕の視点と感想を適当にまとめてみます。きっと W62CA という機種に興味が無ければ全然面白くないし、興味があっても、一部なにを言ってるのか分からないくらい細かいところに言及すると思います。なので、途中で飽きるかも。飽きたらすいません。

ココが変わってて良かった

防水・耐衝撃
濡れを意識しなくていいのは快適。家の洗面所にも気兼ねなく置けるし、アウトドアレジャーにも良い。冬のゲレンデでも気にせず取り出せる
センサーいっぱい(G’zGEAR)
温度計とか電子コンパスが楽しい。室内でエアコン効き過ぎとかわかるし、高度計と電子コンパスは、「あの山はなんだっけ?」とか「富士山こっちか!」みたいのが、これまたゲレンデで楽しめそう(言うほど行ってないくせに)
ブラウザでの通信体感速度アップ
他の部分では速度ダウン(後述)だけど、ここは快適。EV-DO rev.A ってやつ?W51CA が対応してなかったのかどうかは知らないけど、体感は確実に速くなってる
ブラウザでのテキストコピーができるようになった
電話番号が tel: リンクになってないときとか、不便だったんです。これでコピって電話帳登録とかできるようになった
歩数計&カロリーメーター
待受け設定しておいたら、常に当日分の消費カロリーやら食べ物に換算したアニメーションやらが表示されて、楽しい。僕の昨日の運動量はマッシュルーム 198 個分だった。少ないな..
左右キーはブラウザの一画面スクロールになった。ブラウザの「戻る」「進む」は「メール」「EZWeb」ソフトキー
最初違和感があったけど、端末横のスクロールキーは押しにくかったので、これは結構うれしい。ひょっとして FlashLite コンテンツのインタラクティブ再生で四方向ナビゲーション拾えるようになったか?と思って

var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
switch (Key.getCode()) {
case Key.DOWN :
cube._y += 10;
break;
case Key.UP :
cube._y -= 10;
break;
case Key.LEFT :
cube._x -= 10;
break;
case Key.RIGHT :
cube._x += 10;
break;
}
};
Key.addListener(keyListener_obj);

こんな感じで cube ひょこひょこさせるサンプル swf 作ってみたけど、やっぱダメでした。四方向拾えるのは未だに SoftBank だけか

通常メール <=> デコレーションメールの編集中切り替えが可能になった
今まで mailto リンククリックするとデコレーションメール使えなかったのですよ。これで急にデコレーションメールに気分が変わってもだいじょうぶ!
デコレーションメール編集中にデコレーションエモジ(絵文字)へのショートカットが使えるようになった
今までのデコレーションメールはデコレーション絵文字を入れるのでも通常のインライン画像挿入操作だったので、連続入力もできず、使いにくかった。これでだいぶドコモのデコメール編集の使い勝手に近づいてきたかも(ドコモのデコメール編集 UI は通常メールとの境がほとんど感じられない。アレくらい割り切っていても良いと思う。ユーザは HTML メールとか中身がどうなってるとかはどうでも良いんだし)
LISMO Playerの起動速度up
メニュークリック => スプラッシュ表示 => Player メニュー表示が一秒未満。ここはがんばってるとおもう。使ってないけどね(Macだと使えないんだもん
Run&Walk アプリ
ジョギングに使ってみてるけど、地図へのコースマッピングやら、速度チェックやら連動して、ちょっと楽しい。続けんとなあ
背面液晶(電子ペーパー)で時刻が常時表示
なにもキーを押さなくても時刻が常時出ててくれるので、テーブルの上とかでも、操作無しでこっそり時間確認できてよい(何がだ
Bluetooth 搭載
未使用だけど、使ってみたい。Mac で LISMO 行けるようになったらヘッドホンへのアダプタ買って使ってみるんだけどな
ワンセグアンテナが内蔵
いちいちアンテナ伸ばさなくて良い。こういうのは気持ちいい。もっと起動が速くなってくれると良いんだけど

ココは変わってなくて良かった

防水仕様でキーがシート形式なのに、かなり押しやすい
前の W51CA はかなりキーが押しやすい形状だったけど、この機種もキーの凸部がちゃんと確保してあって、シート形式とは思えないほど、ちゃんと触感がある。結構工夫したところじゃないかな、これ
メール送信中に折り畳み閉じても、送信処理続行してくれる
稀に、折り畳むと送信処理を中断する機種が居て、送信完了まで見届けないといけないのが困る。たまに「送信できませんでした」ってエラーを報告してくるのはなんとかしてほしいけど(送信できるまでやってくれよ、と思う)

あ、この項目あんまし無いな。でも、↑は重要。

ココが変わってて残念

基本的に、何するにも処理遅い
通信速度は上がってると思うんだけど、メインメニュー起動、メール画面表示、ブラウザやメーラから待受に戻る、データフォルダ開く、など画面を切り替える操作は、ほとんどが 1 秒以上かかる。データフォルダ表示や移動に毎回「処理中です」とか出るのも謎。前の機種よりも全然データが少ないのに。
メニューカーソル移動も、方向キー押しっぱなしで動かすだけでも 3,4 項目ごとに引っかかる。文字入力もたまに後追いになる。すげーストレス
電源ボタン短押しで、待受に戻らない
メインメニューより下の階層にいると電源ボタンでメインメニューへ、ブラウザだと EZWeb メニュー画面へ、というように、一発で待受に戻らなくなった。常に待受に戻しておきたいのに、電源連打しても上述の通りレスポンス遅いので、これまたストレス
待受ショートカットから新着メール起動して、電源ボタンで待受に戻ってくると、他のショートカットにカーソルが残留している
この状態だと、EZ ニュースフラッシュが流れないので、もう一度電源ボタンを押してカーソル解除する必要がある。ただし EZ ニュースフラッシュが流れているときに電源ボタンを押すと、ニュースフラッシュが消えてしまい、再度表示するためには「上」キーを押す必要がある => しかも、この表示に 1 秒程度かかる上に、表示設定無しにしてある検索ガジェットが勝手に登場してくれる(意味がわからん..)。このため、「常に待受はニュースフラッシュ表示させておきたい」場合は、電源ボタン連打ではなく、待受に戻る => クリアキーでカーソル解除 をいちいち画面で応答状況を確認しながら操作する必要がある
ガジェット使わない
表示する => ガジェット操作に入るためにそれぞれ 1-2 秒かかる。これなら前の機種でショートカットメニュー開いた方がよっぽど早い
2画面分割(マルチウィンドウ)使わない
分割できたのは一瞬うれしくてスゲーって思ったけど、ケータイでそんなにいっぺんにいろいろやんないから、それで重くなるくらいなら要らない。なんでいろんなキャリアでマルチタスク的な機能を入れてるんだろう。みんな使ってるんだろうか。ドコモで「ブラウザがこれ以上開けないから一旦終了してください」みたいなエラーが出るのも、未だにまったく理解できない
ケータイ de PCメール、使うと思ったけど有料だし使わなさそう
IMAP してる gmail をブラウザで覗きに行くだけでわりと十分とわかった。会社メールの流量が少なくて、それをケータイで送受信したい人は便利かもね
ツータッチ入力設定で英字モードに入ると、ここでもツータッチ設定になる
日本語ツータッチ入力設定してあっても、英数字はツータッチになってないのが au の魅力だったんだけど、変わってしまったみたい。ボタン一個で通常の英数字入力モードに戻せるので、まだ我慢できるけど、前の方がよかった。みんな英数字もツータッチで入力してるのかな?ドコモとSoftBankはツータッチ設定を解除しないと英数字入力もずっとツータッチになるのが使いにくいんですよ
ツータッチ入力時の記号の割当や改行入力、記号表呼び出し時のキー割当が微妙に変わっている
これは慣れるしか無いかなぁ.. 句読点(前まで 88 で入力できてた)はどうやって入れるんだ
背面液晶(電子ペーパー)に呼出し元が表示されない
解像度&アニメーションの応答的に厳しいのかな.. 開いてメイン液晶見れば良いんだけど、不便
メニューの背景色ができない。フォントも細くてヘニョイのしか無い
装飾できるメニューは一階層めだけみたいで、その下は、すげーシンプルな白黒 UI しかない。フォントも、変。gmail を EZWeb ブラウザで見ると、フォントが旧世代の機種のドット文字みたくカクカク。なんだこれ。どうにかできるのかな..
電話をかける際の呼び出し中画面で、コール先の電話番号表示が消える
「プップップッ」音が消えたときとかに間が空くと「あれ?どこにかけたっけ?」って思うんだけど、画面に何も表示されてなくて、確認のしようが無くて困る
EZムービーの早送りが、高速再生というより、秒飛ばしコマ表示再生
EZムービー再生中に右キーを押すと早送りできるんだけど、W51CA はそこそこ滑らかな高速再生で、一通りの映像が見られたのに、この機種は数秒ごとのコマがパラパラで表示されるようになっちゃってる
ライト点灯のキーが暗闇で識別しにくいところになった
W51CA は # 長押しでカメラ用のライトが点灯できて、簡易懐中電灯的に使えた(PCの裏側とか机の下の暗所作業でよく使う)んだけど、この機種は側面ボタンの 4 つ並んでるうちの上から 2 番目にライトが割り当てられてる。これがなんとも暗闇では指先で判別しにくい位置で、これまでに何回もマナーモード設定キーと間違えちゃってる
たまにメインメニューからその下の階層に行けなくなる
メニューのカーソルキーは動くのに、決定キーが無視されて、一切のメニューが使えなくなる。再起動すると復帰。なにこれ
折り畳み開いたときに、たまに画面真っ黒でなにも表示されない
何かボタンを押すと待受けが表示される。何が起こってるんだ
たまにカメラが起動できない
カメラ起動しようとすると「カメラの起動に失敗しました」ってエラーが出る。知らんよw この現象が出ると、電源も切れなくなるので、電池パックを外して再起動。

ココが変わってなくて残念

ブックマークデータ移行時に、フォルダ構造が消える
W51CA にしたときもこうだったんだけど、未だに同じだった。ブックマークの整理を作り直すのが面倒

こんなかんじかな。変わっても我慢できるものは仕方ないとして、基本的に、処理が遅くなってるのがストレス。au は速かったのが良かったんだけど、これでモッサリ度は 3 キャリアだいたい一緒になってしまったなあ。防水は本当に有り難いので、ソフトウェア更新で速くできるものならガンガンやって欲しい。(いろんな事情があって)無理なんだろうけど。


ちなみに、ナカチェン?ケータイアレンジ?、とかでメインメニューを変える際は、項目ごとでカーソル停止した際にアニメーションが入るタイプを選ぶと、大変遅いぽいので、さくさく使いたい人はアニメーションが入ってるようなメニューは避けた方が良いと思う。これは FlashLite が遅いのかな。au で FlashLite アニメーション、やけに遅いし。


以上、大変偏った視点で恐縮ですが、思うままに書きました。

Tagged with:
5月 02

ssh(1) と apache proxy を使って、ローカルの開発環境にケータイの実機ブラウザから直アクセスして動作確認する方法。ssh(1) の -R オプションを使うのがキモです。これだけで分かる人は、以下略でどうぞ。

ちょっと考えたらできそうな気はしてたんだけど、-R オプションの存在を知らなかったので、いろいろ試してみる時間が取れなかったのです。で、ふとマニュアル読んでたら -R オプションの存在を知り、やってみたらやっぱし簡単にできた、と。みんなやってるのかもだけど、あまりネット上で見かけない tips なのでポストします。

動作イメージ

(A)                  (B)                        (C)
携帯電話 ←────→ サーバ ←─────→ ローカル開発環境
http    80   13000    ssh    3000

まず、(C) の開発環境で Web アプリケーションを稼働させて、その後 (C) から (B) サーバへ ssh(1) で接続します。この際、-R オプションを指定し、(B) サーバの適当なポート(ここでは 13000)へのアクセスを、(C) の稼働環境 Listen ポート(ここでは 3000) にフォワードします。

次に、(B) サーバへの http アクセスを、(B) サーバ上ローカルの 13000 ポートにプロキシする設定をします。これで、(B) サーバへの http アクセスが、ssh のポートフォワード設定に渡されるようになります。

設定はこれだけ。あとは (A) の携帯ブラウザから (B) へ接続すれば、アクセスがローカル開発環境へ飛んできます。

用意するもの

上図の通り、(B) サーバとして使える インターネットから固定名もしくは固定IPでアクセスできて、わりと自由に使えるサーバ機 があれば、だいたいオッケーです。レンタルサーバでも良いですが、リモート側に開いたポートをローカルにフォワードするということをやるので、共用環境ではオススメしません。

ローカルの開発環境を見に来る、ということですので、ローカルには Web アプリケーションの稼働環境が入っている事が前提です。最近の気の利いたフレームワークは httpd や DB もセットになっててラクチンですね。

サーバ側の設定

上記 (B) サーバのアクセス名を example.com とします。

サーバ側には ssh 接続できる sshd と、適当な http プロキシの設定が必要です。僕は sshd に OpenSSH、http プロキシには Apache の mod_proxy を使いました。どちらもパッケージシステム等で簡単にインストールできます。

Apache のプロキシ設定は、以下のような感じです。httpd.conf など適当なところに書きます。

ProxyRequests Off
<VirtualHost *>
ServerName mobile.example.com
ProxyPass / http://localhost:13000/
ProxyPassReverse / http://localhost:13000/
</VirtualHost>

mobile.example.com の部分は、適当に読み替えてください。
要は ProxyPass を書くだけなので、Location とかで適当なパス以下をプロキシしても良いと思います。VirtualHost にしてるのは、アプリ内で指定するリンクのパスの書き方を初期から気にするのが面倒なのでルートを合わせたい、というだけ。

ここまで設定が終わったら $ apachectl graceful で適用して、サーバ側設定おわり。

ローカル開発環境側の設定

(C) のローカル側には ssh 接続クライアントが必要です。ssh クライアントが用意できたら、上記の (B) サーバに ssh するときのオプションとして -R を指定し、接続します。

$ ssh -R13000:127.0.0.1:3000 example.com

こんな感じ。-R オプションには、サーバ側で待ち受けるポート:フォワードする先のアドレス(接続元ネットワークで識別できるもの):フォワード先ポート を指定しています。127.0.0.1 のところには localhost と書いても良さそうなのですが、これだと僕の環境だとうまくいきませんでした。詳しくは $ man ssh をどうぞ。

携帯からアクセス確認

携帯のブラウザから、プロキシ設定した (B) サーバ(上記だと http://mobile.example.com/ )へ接続すると、ローカルの稼働環境にアクセスが飛んできます。ssh(1) スゲー。-R オプションスゲー。

うまくいかなかったら、ssh 接続した状態で (B) サーバから $ curl http://localhost:13000/ とかやって、ポートフォワードがちゃんと動いてるか、mod_proxy の設定がちゃんと生きているか、とかとか、確認してみてください。

おわりに

最近は携帯サイト開発向けのイカしたエミュレータが出てきてたりしてますし(Winソフトなので、使えてない Orz)、moxy やら ssb も超便利なので、あんまし面白くない tips かもしれません。が、ケータイサービス作ってると、やっぱし実機確認が、ツラくもあり面白くもあるフェーズだと、僕はおもいます。どうせパケット定額制使ってるんなら、がりがり実機確認しちゃえばいいじゃん、と。

手元の実機で目の前で作ってるアプリがすぐに見られるというのは、結構快感です。ちょっと出来上がってきたので実機で見ようかな、と思っても、デプロイ環境作るまでに一手間あって、そこでテンション下がることも多いです。手元でちまちま仕込みながらも、さくっと実機確認できる環境があるのはうれしいなあ、とやってみながらおもったのでした。

おお、最近ずっと書いてなかったからか、やけに真面目な文体になっている。なぜだ。

Tagged with:
1月 18

@グローコム。本家に詳細なレポートがアップされているので、適当に感想だけ。

  • PDF って ISO スタンダードになってたんだー
  • フォントのアンチエイリアシング周辺に三菱電機からライセンスを受けてる部分があるとか。へ〜
  • 開発ツールに消しゴムとか許せない人たち.. 僕はそんなでも無いな..
  • AIR で DLL へはアクセスできないけどネイティブ exe とのプロセス間通信で解決できるよ!そういうことやってる人もいます
  • ケータイ対応は、Flash も AdobeReader も終わってて、後は Webkit の作り込みのとこだけ、と見てる。でも FlashLite の変な制限は嫌、アレ、終わったことにして欲しくない (^^; キャリア制限で仕方ないのかも?だけど
  • AMF3 てそういうメッセージング周りの取り組みだったのか〜、あまり意識して追ってなかった。てか AMF3 の公開仕様も、チェック漏れだった。最近、そういうメッセージングベースのシステム間連携とか統合ネタが多いんだな
  • ケータイに送る SWF の合成。元 SWF が多いと容量オーバーするので、途中で ImageMagick でラスタライズしてたり。これはやってみないとわからないノウハウだ
  • シンボルの入れ子が 7 階層以上になると、再生時に真っ白に。これ知らなかった。こういう謎現象多いからツライ
  • そういえば、ドコモ端末で画像部分が真っ赤になるのも undocumented じゃないか。あれも DeviceCentral 再現しないからな〜

というわけで、新しげな話から現場の話まで、なかなか楽しく聞ける話題が多くて面白かったです。とくに、現場な FlashLite ネタってあまり聞けないですからね〜。GREE さん、いつもありがとうございます。

今回は飲み会に行けなくて残念でした。前日の鍋が残ってたのと金欠が出席見送りの主な理由なんですが、次回はうまいこと調整できるといいなあ。

Tagged with: