2012年11月25日日曜日

vim : netrw の note が出て困る


最近、windows で vim を使い始めました。
NetBeans だと、自動で補完されるので忘れっぽい私にはとても助かっていたのですが、毎日2回は反応しなくなるという困ったちゃん。
そこで、社内の Vimmer から色々頂いて vim に挑戦したわけです。

しかし、vim を使っていると次のような注意書きが毎回出てきて、ちょっと困ってました。

**note** (netrw) consider setting g:netrw_localcopycmd<copy> to something that works


検索したら、対処法が見つかったのでやってみます。




vim ~/.vimrc

" ファイルの最後に以下を追加しました。
let g:netrw_localcopycmd=''


これで、エラーが出なくなりました。

ちなみに、netrw は ファイルブラウザ。:Explore コマンドのやつです。

Netrwを使いこなす
http://d.hatena.ne.jp/hagure_beans/20100603/1275591475


2012年11月12日月曜日

mysql に 4バイトutf8 の文字を入れたい

MySQL に iOS の絵文字など、4バイトUTF-8 の文字を入れると、そこで途切れるという現象がありました。
残念ながら発生したサーバの MySQL バージョンは5.1系でバージョンアップせずに対応したのですが、最近構築したサービスイン前のサーバは5.5系だったので設定してみました。


■設定内容
1. 文字コードを utf8 → utf8mb4 に変更
2. skip-character-set-client-handshake を設定


■詳細
1. 文字コードを utf8 → utf8mb4 に変更

MySQLの UTF-8 は4バイトに対応していません。
ですが、絵文字や中国漢字、日本語でも特殊漢字などは4バイトが含まれています。

詳しくはこちら↓
iOS の絵文字(4bytes UTF-8)が入った文字列を MySQL に INSERT/UPDATE すると絵文字以降の文字がぶった切られる件

------------

2. skip-character-set-client-handshake を設定

mysql.cnf の character-set-server を変更しただけでは、PHP で取得した時の文字コードがビルドした時のものが使用されます。
そうすると、MySQLのエラーが出てしまうのです。

General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ...

これを、ビルドした情報ではなく、MySQL サーバの文字コードで取得するには次のオプションを使います。

skip-character-set-client-handshake

詳しくはこちら↓
PHPとMySQLの個人的まとめ


■変更内容
# vi my.cnf

[client]
-- default-character-set = utf8
++ default-character-set = utf8mb4

[mysqld]
-- character-set-server = utf8
++ character-set-server = utf8mb4
++ skip-character-set-client-handshake


■phpから文字コードを見るコード

<?php

$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_pw   = '';
$mysql_db   = 'mysql';

$conn = mysqli_connect($mysql_host, $mysql_user, $mysql_pw, $mysql_db);

$sql = "SHOW VARIABLES LIKE 'char%'";
$result = mysqli_query($conn, $sql);

while ($data = mysqli_fetch_array($result, MYSQLI_NUM)) {
    echo str_pad($data[0], 24) ." | ". $data[1]."\n";
}

?>
-------------

以下、実行結果です。

character_set_client     | utf8mb4
character_set_connection | utf8mb4
character_set_database   | utf8mb4
character_set_filesystem | binary
character_set_results    | utf8mb4
character_set_server     | utf8mb4
character_set_system     | utf8
character_sets_dir       | /usr/local/mysql/share/charsets/

2012年10月29日月曜日

新しいサービスの提案:写真に署名を入れるサービス


ちょっと思いついたのでメモしておきます。
今はアイディアレベルですので、作ってやるぜ!という方、アイディア頂き!という方、どうぞ宜しくお願いします。
こここうするとイイヨ!とか、同じサービスあるよ!とかでも構いません。
ご連絡は @netsket_koshiba まで。

このアイディアで(・∀・)ニヤニヤ出来たら、お酒1杯ご馳走してもらえれば(ゴニョゴニョ…



■どんなサービス?
SNSやブログにアップする写真に、サイトURLやアカウント名などの定型文(署名)を入れて返却するサービス。


■どうして?
お気に入りのブロガーさんが写真をSNSにアップした所、勝手に使われてしまって困っているとつぶやいていたから。(複数)


■どうする?
入れたい文字と写真を選んで送信。
文字入れした写真をダウンロード。


■どうやって儲ける?
定型文の登録、アップできる写真数の制限解除が出来るアカウント作成。
月の利用料ではなくデポジット制。
アカウント削除時にデポジットが残っていたら返却。

2012年9月24日月曜日

qpstudy 2012.09 秋なのに怖い話 〜障害発生編〜 に行ってきた



9月22日に行われた「qpstudy 2012.09 秋なのに怖い話 〜障害発生編〜」に行って来ました。
参加された皆様におかれましては、参加のためにeverevo(イベレボ)の負荷テストにご協力頂きまして、誠にありがとうございました。
懇親会LTでグダグダなご挨拶でしたが、皆様にお礼ができて良かったです。


さて、本編です。夏は終わりますが障害に関する怖い話です。
背筋が凍る話があったり、爆笑が起こったりと、いつもながらに楽しい勉強会でした。
今回の進め方は、登壇者が怖い話をして、「どうしたら良かったか」というのを参加者に答えてもらうという形式だったのですが、とても良いですね!勉強になりました!


以下、勉強になった点をずらずらと。

・負荷テストは機能単位で行うのも大切。模擬障害とか。
・サーバ構成図とシステム構成図の2つは必要。2つ揃ってサービス構成図。
・障害の多いサーバには大抵お札が貼ってある。
・障害調査は下から。泥棒もタンスは下から。ハード→設定→ミドル→アプリ→ユーザー。
・動いている時はミドルorアプリor設定orユーザー。
・死んでる時はハードorDC。
・DCが原因という障害は結構ある。
・優秀すぎると命狙われる、きけんなしょくぎょう。



懇親会も盛り上がりましたね。
いつもはLTの時談笑もされていたのですが、今回はほぼ全員が懇親会LTを見聞きしてました。
個人的には、終了間際の魔法の言葉からBLへの話と、
はせごーさんの「夕飯どうしようと思ってTL見てたらqpstudyやってて、懇親会空いてたから来たんだ」という話が楽しかったですw


主催のリーダー、スタッフの皆様、参加された皆様、ありがとうございました!
またお会いしましょう!

2012年8月29日水曜日

mod_evasive で画像をチェックしない方法

セキュリティ対策として、mod_evasiveを入れたのはちょっと前。
画像のロードが多いサイトだったので、DoSアタックと勘違いされてアラートメールがぞくぞくと…

通常、mod_evasiveはIPアドレスしかwhitelistに登録できません。
そこで、コンパイル前のソースを書き換えて特定の条件ではスルーするようにします。



------------------------------



[mod_evasive20.c]

- #define MAILER  "/bin/mail %s"
+ #define MAILER  "/bin/mail -s 'DoS Alert! from your-service.com' %s"


static int access_checker(request_rec *r)
{
int ret = OK;

+    /* IGNORE_DOS */
+    if (apr_table_get(r->subprocess_env, "IGNORE_DOS") != NULL)
+      return OK;


※apr_table_get(r->subprocess_env, "IGNORE_DOS") でIGNORE_DOSが有効になっているか確認します。
※apache1.3 を使っている方はいないと思いますが、もし使ってたらap_table_getに直してください。
------------------------------

[modevasive.conf]

+ SetEnvIf Request_URI "\.(gif|jpg|png)$" IGNORE_DOS


※URIに特定の拡張子が含まれていたらIGNORE_DOSが有効になります。

------------------------------


なお、mod_evasive20.c を書き換えた後は、apxsでコンパイルしてApacheの再起動を行います。

# apxs -ica mod_evasive20.c
# apachectl configtest
# apachectl graceful


以上!



※参考URL※

ap_table と apr_table の違い



2012年8月10日金曜日

Fedora8 で php をインストール

今時Fedora8は無いだろうとあちこちから言われそうですが…

たまたま昔テスト用の環境に作ったものが残っていたので使っていましたが、phpのバージョンが古くエラーが出てしまいました。
OSのバージョンアップでも良いのですが、phpだけアップグレード出来ればと思いまして…(^_^;)


phpはyumでインストールしていました。
なのでyumで5.3をインストールしようとしましたがバージョンがありません。(当たり前
remiを使ってインストールするようです。



wget http://rpms.famillecollet.com/remi-release-8.rpm
rpm -ivh remi-release-8.rpm
yum install --enablerepo remi php

2012年8月7日火曜日

ec2-bundle-vol で鍵ファイルが削除される


ec2 tools を更新したインスタンスでAMIを取得し、そのAMIを起動した時の事です。
元のインスタンスでは動いていた ec2 tools のコマンドでエラーが発生する(;´Д`)
理由は、秘密鍵等々が無いから。



どうやらver.1.4.0.0以降ではこれらのファイルが削除されるのがデフォルトのようです。
以下、「--manual」より。

The recursive copying process copies directories from the volume into the image.
The special directories:

- '/dev'
- '/media'
- '/mnt'
- '/proc'
- '/sys'

are always excluded.

Files matching the following regular expressions:

- '*/#*#'
- '*/.#*'
- '*.sw'
- '*.swo'
- '*.swp'
- '*~'
- '*.pem'
- '*.priv'
- '*id_rsa*'
- '*id_dsa*'
- '*.gpg'
- '*.jks'
- '*/.ssh/authorized_keys'
- '*/.bash_history'

are excluded by default on Linux. Individual files that match these patterns may be
included by specifying the '--include' option.



ちなみに、これまで使っていたver.1.3-53773では削除されません。
マニュアルにも載っていません。うぐぅ…
仕方がないので、必要なものだけは「--include」で指定しました。