よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

IE11でGoogle Document Viewer経由でのPDF表示ができない問題を楽に解決する方法

IE11で厄介な問題が発生しています。
ドキュメントを簡単にインライン表示できるGoogle Document Viewerを使っている方は多いかと思いますが、現在のIE11ではそのPDFが表示されなくなっています。
とても困ります。どうにかしてください、Microsoftの方。

と、嘆いていても仕方ありませんので、IEハックでこの問題を解決しましょう。
対応は簡単で、meta要素でレンダリングモードを強制変更してしまいましょう。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

上記は例としてIE9準拠モードに設定しています。たぶんIE=EmulateIE10でもOKと思います。

レンダリングモードの強制変更については下記に詳しくまとめてありますので、そちらをお読みくださいな。

IE8以降のバージョンでレンダリングモードをmeta要素で指定する時のまとめ | MJ-WAVE.COM

また、meta要素のX-UA-Compatibleの仕様は下記をご覧ください。
[MS-IEDOCO]: X-UA-Compatibility Meta Tag and HTTP Response Header

レンダリングモードを強制変更しているため、機能に悪影響をおよぼす可能性もあるので、きちんと動作確認しましょうね。設定は自己責任でお願いします。

「Zabbix統合監視徹底活用〜複雑化・大規模化するインフラの一元管理〜」を読んで

TIS Enterprise Ondemand ServiceというIaaSサービスを提供するTIS。そんなサービス運用で培った?Zabbix運用監視ノウハウ本が2月7日(金)に発売とのことです。著者は私がTIS時代に一緒に仕事をしていた池田くん(@ike_dai)です。
ご献本ありがとうございました!

f:id:interu:20140204175002j:plain


この本を読んでみて、"複数のプラットフォーム(イントラ/IaaS/PaaS)でサービスを運用している人や、IaaSのサービサーの人なら必ず読んでおきたい1冊"だと感じました。最近の仮想化技術やクラウドのトレンドの解説から始まり、実際にさまざまな環境をZabbixで運用監視するにはどうしたらよいかなどが書かれているためです。


本書のターゲットはZabbix運用を既にやっている方のようで、Zabbixの使い方を初心者向けに解説した本ではないため、Zabbixをまだ利用したことがない方はこの本を読む前に『Zabbix統合監視[実践]入門』や『Zabbix公式マニュアル』を読んでおくとよさそうです。

Zabbixオフィシャル日本語サイト :: エンタープライズクラスの分散監視オープンソースソリューション


また、Zabbixのことだけに興味がある人なら、PartⅡの6章以降から読むことをオススメします。パフォーマンス問題であったり、監視の効率化の話など、複雑なシステムを実際に運用されて得たノウハウを惜しみなく公開されていますので、Zabbixを利用していて問題に遭遇している人なら、解決策を見つけることができるかもしれない内容になっているからです。
本書内では、ZabbixやvSphereなどのAPI利用方法をサンプルスクリプトをまじえて解説してあるので、プログラミングやAPIに抵抗がある方でも気軽に試せると思います。

本書の後半では、監視対象が増えた時に困りがちなZabbixのバージョンアップやZabbixAgentの管理についてChefを使った継続運用のやり方や、Fluentdと連携したログ監視など、最近のトレンドに沿った利用方法が紹介されており、わたくし個人としても十分に楽しませていただきました。


最後に目次をのせておきます。

  • Part I 物理・仮想・クラウド環境運用の基礎知識
    • 第1章 多様化するインフラ環境
    • 第2章 物理環境の監視・管理
    • 第3章 仮想環境の監視・管理
    • 第4章 クラウド環境の監視・管理
    • 第5章 物理・仮想・クラウド混在環境の監視・管理
  • Part II Zabbixによる物理・仮想・クラウド混在環境の統合管理
    • 第6章 Zabbixの監視のしくみ
    • 第7章 監視の効率性向上
    • 第8章 構成情報管理の効率性向上
    • 第9章 設定ファイル,ソフトウェアパッケージ管理の効率性向上
    • 第10章 ログ管理の効率性向上
    • 第11章 環境操作の効率性向上
    • 第12章 HyClops for Zabbixの概要

MySQLでcharacter_set_databaseがlatin1になってしまう問題の対応方法

アプリケーションのバージョンアップなどでテーブル追加を伴うスキーマ変更があった場合に、テーブル追加したところのデータだけ画面で「????」になって表示されてしまうことが稀にあります。
この対応方法について、発生理由と共に簡単に解説しておこうと思います。


結果だけを先に書いておくと、今回の根本原因はAmazonRDSを起動するときのパラメータグループの初期設定が不十分で、初回create database時に default character set に想定外のものがセットされていたためです。
下記ではその原因を特定する方法と解決方法を示していきます。


まずは文字化けした時に状況確認を行ってみてください。おそらくは下記のような状況になっているかと思います。※今回は文字コードを全てutf8に統一しているものとします。

まずは文字化けしているテーブルの情報を確認してみます。

mysql> show create table notifications;

Table Create Table

| notifications | CREATE TABLE `notifications` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`title` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`link` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `index_notifications_on_user_id` (`user_id`),
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 |

CHARSETが latin1 になっていますね。本来は utf8 になるべきなのに。

では、なぜ latin1 になっているのかを確認します。


MySQLでは、サーバ全体/データベース/テーブル/カラム という括りで文字コードを指定できるようになっています。
データベース作成時に文字コードが指定されていなかったら、サーバ全体で設定されている情報を参照して作成されます。
同様にテーブル作成時も、文字コード指定がなかったらデータベースで指定されている文字コードを適用します。カラムについても同様のロジックです。


なので、テーブル作成時に参照されたデータベースの文字コード情報を確認したら latin1 になっているはずですので、それを確認してみます。


mysql> show variables like 'character%';

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8


character_set_database だけが latin1 になっています。
念のためにSESSIONの情報ではなくGLOBALの情報も確認しておきます。


mysql> show global variables like 'character%';

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8

こちらはパラメータグループで設定されている値が反映されていますね。


mysqlのコネクションを何度も繋ぎ直してもshow variablesの出力値は変化しないため、テーブル作成時はここでセットされている値(latin1)が参照されます。
では、この値はどこを参照しているかというと、create database した時の値です。

確認コマンドは以下です。


mysql> show create database `railsapp_staging`;

Database Create Database
railsapp_staging CREATE DATABASE `railsapp_staging` /*!40100 DEFAULT CHARACTER SET latin1 */


確かにdefalut character set が latin1 になっていますね。


これで原因は特定できました。
あとは解消するためにはどうすれば良いか、です。

まずは、新規にテーブルが作成された時に latin1 で作成されないようにする必要があります。

変更のコマンドは、こちらです。


mysql> ALTER DATABASE `railsapp_staging` default character set utf8;

※ALTER DATABASEの仕様
MySQL :: MySQL 5.6 Reference Manual :: 13.1.1 ALTER DATABASE Syntax
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.1 ALTER DATABASE 構文


これで、データベースの文字コードが utf8 になるはずです。
以下のコマンドで確認できます。


mysql> show create database `railsapp_staging`;

Database Create Database
railsapp_staging CREATE DATABASE `railsapp_staging` /*!40100 DEFAULT CHARACTER SET utf8 */


サーバ設定も更新されていますね。


mysql> show variables like 'character%';

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8

他にも、テーブル/カラムの文字コードも変更してあげないと文字化けは解消しません。
これについては、http://kzworks.at.webry.info/200903/article_14.html で解説してあるようなので、参考にしてみてください。


今回は latin1 で生成されたテーブルをDrop/Createして再生成することで、文字コードが utf8 になり、文字化けが発生しなくなることは確認できました。

困ったときは上記手順でお試しあれ。



あわせて読みたい

DevelopersのためのSonicGardenで実践しているシステム運用での11の常識〜SonicGarden Study〜 の資料を公開します!

2013年06月から毎月第1月曜日に開催しているUstreamで放送するオンライン勉強会「SonicGarden Study」も無事6回目が終了しました。
昨日の勉強会に参加してくださったみなさん、どうもありがとうございました。

f:id:interu:20131112012331p:plain

事前参加登録数も117名という、ものスゴイ数となりましたが、それもこれも名プロデューサーである元恒ちゃん(@bomcat)の努力の賜物です。
毎回念入りな事前準備をしてくれてどうもありがとう!

お礼はこれくらいにして、SonicGarden Study #06 で利用した資料をこちらで公開します。



資料だけだと何を言っているのかよくわからんぞという方は、Ustreamでチャンネル登録していただけますと当日の録画をご視聴いただけます。
http://www.ustream.tv/channel/sonicgarden-study



最後に勉強会に参加された方やこちらのブログで資料をご覧いただいた方にお願いが。

資料に関する質問やコメントなどありましたら、画面右下に表示されているMessageLeafやTwitterで #sg_study のハッシュタグをつけてフィードバックいただけたらと思います。なお、特典として次回12月のSonicGarden Studyへ数名の方をオフィスにご招待(交通費は自己負担で!)しようと考えていますので、ご興味のある方はぜひぜひフィードバックお願いします!!

また、この資料の続きが気になる!!という方がいらっしゃいましたら、外部の勉強会でも発表していけたらと思っていますので、お気軽にお声掛けいただけたらと思ってます。Twitter@interu へご連絡くださいませ。

それでは次回は「SonicGarden座談会」というタイトルのもと、12月02日に開催されますので、ぜひ引き続きご参加ください。



あわせて読みたい

SonicGardenにおけるAWS運用について最低限知っておくべきことのまとめ

これまで私が勉強会やJAWSUGなどのイベントで発表した時に作成した資料をまとめておきます。

AWSやHerokuなどのIaaS/PaaSを使う上でのSonicGardenならではの考え方などを綴っているので、ご興味のある方はぜひお読みいただければと思います。

2012年10月 JAWS-US in 名古屋



2013年3月 Developer Migration 2013



2013年9月 JAWS FESTA Kansai 2013

JAWS FESTA Kansai 2013で発表した「SonicGarden流DevOpsの実践」の資料を公開します

AWSのユーザグループによるイベント(JAWS FESTA Kansai 2013)に参加して、DevOpsについてお話させていただきました。

f:id:interu:20130930223149j:plain


発表の概要は、少人数で自社サービスから受託案件まで数十ものサービスを提供するために実践しているDevOpsについて、技術的な内容から開発/運用の考え方について、でした。
http://jfk2013.jaws-ug.jp/speaker/interu/


ご興味のある方はぜひご覧ください。


本イベントの事前登録者は850名を越え、当日参加頂いた方は600名越えだったようです。
JAWS-UGのイベントとしては国内最大規模となったようですね。
セッション数も30近くが準備されており、AWSについて学ぶにはよい機会だったと思います。

イベント運営に携わっていただいた方々、ご苦労様でした!