読者です 読者をやめる 読者になる 読者になる

AWS Summit Tokyo 2014で発表してきました

表題のとおりです

色々あって発表する機会を頂けたので行ってきました

同期と一緒に20分ずつの発表でした

 

本番前は論文発表会以来の緊張で, まだまだ変わってないなと思いました

 

内容はGlusterFSやSerf, Dockerといったものを組み合わせた自動化についての話しました

私のパートはより技術的な視点からの話が多かったのでどうかなと思っていましたが, Twitterを見ている限り来場者の方々には楽しんでいただけたようです

 

色々ありましたがご協力頂いた皆様ありがとうございました

資料はいずれ公開する予定です

Xcodeの変なフォーカスを消す方法

Xcodeを使っていて次のようなフォーカスがあたってソースが見にくくなった時の直し方です

f:id:Takashi_kun:20140301124855p:plain

 

このフォーカス, ソースのネストが深くなると上位は一層ボケるようになってソースを見渡すのに非常に不便

 

直し方は簡単

 

Preferences > Key Bindings

検索ボックスで"focusと入力"

f:id:Takashi_kun:20140301125117p:plain

"Focus Follows Selection"の項目をダブルクリック

適当にキーを割り当てて閉じる

 

エディターを選択してさっき割り当てたキーを実行

 

f:id:Takashi_kun:20140301125334p:plain

 

 

消えました!

2014年の抱負

あけましておめでとうございます

って言ってももう三が日も終わってますが(笑)

 

早速ですが今年の抱負でも書かせていただきます

 

今年は「焦らず」に行こうと思います

 

去年は特に夏頃から色々なことに手を出して結果あまり大成しませんでした

今年は一つ一つをもっと丁寧にみて, また周りに流されずに自分の範囲で結果を残して行ければと思います

 

といっても春頃にまた色々慌てていそうですが(笑)

 

そんなこんなでことしも技術・趣味色々なことを書いていきます

 

今年も宜しくお願い致します

Fluetdでタグを動的に変更してやる

23日目は私@Altsencturelyが担当させていただきます。

 

さて, 今回はタイトル通りFluentdのタグを動的に変更する方法を紹介します。
この方法, なんとプラグインを使うだけで自分で何かを作る必要は全くありません。
既存のもののみで変更可能です!!
実際どの場面で使うのかはわかりませんが(笑)
準備するプラグインは以下のとおりです

 

このプラグインをインストールしておきます
# gem install fluent-plugin-record-reformaer fluent-plugin-rewrite-tag-filter
あとはtd-agentのconfigに設定を書くだけ
<match tagA>
  type type record_reformer
  output_tag temp_rewrite

  newtag hogehoge.log
</match>

<match temp_rewrite>
  type rewrite_tag_filter
  rewriterule1 newtag hogehoge rewrited_tag
</match>

<match rewrited_tag>
  type file
  path /var/log/td-agent/test.log
</match>
こんなかんじで書きます
上から[tagA]でマッチしたらデータにというを追加します
それを2つ目のmatchでヒットさせてrewrited_tagというタグ名で再度emitします
あとは書き換え先のtagでやりたいことをやるというかんじです

 

これを応用するとタグの記号を他のものに代用させることが出来ます。
例えば, Redshiftのpuginを使用するとして, tag名とテーブル名で対応させたいときってあると思います。
もしtagに[/, .]等が入っている場合Redshiftにそのままテーブル名として使うことが出来ません。
そこでそれらの記号を[_]で書き換えたいと思います。
先ほど使用したpluginと合わせてもう一つ次のpluginを使います
configは次のとおりです。
<match tagA>
  type type record_reformer
  output_tag rw_first

  newtag hogehoge.log
</match>

<match rw_first>
  type rewrite
  add_prefix rw_second
  <rule>
    key     newtag
    pattern (\.|\/)$
    replace _
  </rule>
</match>

<match rw_second>
  type rewrite_tag_filter
  rewriterule1 newtag hogehoge rewrited_tag
</match>

<match rewrited_tag>
  type forest
  subtype redshift
  <template>
    table_name ${tag}
  </template>
</match>
こうすることで動的にタグ名からテーブル名を作ることが出来ます
Fluentdはpluginも多く組み合わせるとかなりなんでも出来ます
みなさんも色々試してみてください

FuelPHPとFluentdを連携させてみる

FuelPHP AdventCalendar 2013の20日目です。
今回はFluentd + FuelPHPについて書きたいと思います。
まず, 「Fluentdって何?」と思った方はこちら
今回の目標はFluentdとObserverを連携して, データを送れるようにします。
手順は次のとおりです。
  1. ライブラリの取得
  2. packagesの準備
  3. Observerの設定

1. ライブラリの取得

Fluentd用のPHPのLoggerはこちらにあります
これをfuel/packages/fluentd/vendor/以下に入れます

2. packagesの準備

fuel/packages/fluentd/以下にbootstrap.phpを作成します

fuel/packages/fluentd/bootstrap.php

<?php
    require_once __DIR__.'/vendor/Fluent/Autoloader.php';

    Autoloader::add_classes(array(
        'Fluentd\\Observer_Td' => __DIR__.'/classes/observer/td.php',
    )); 
このAutoloaderに合わせてfuel/packages/fluentd/classes/に必要なファイルを記述します

fuel/packages/fluentd/classes/observer/td.php

<?php
    class Observer_Td extends \Orm\Observer {

    public function after_save(\Orm\Model $obj) {
       $save_data = array();
       foreach(array_keys($obj->properties()) as $p){
           $save_data[$p] = $obj->{$p};
        }
        
        $instance = new \Fluent\Logger\FluentLogger(‘localhost’,’24800’,array(),null);
        $instance->post(’tag_name_for_fluentd’, $save_data); 
    }
} 

3. Observerの設定

Observerを設定して実際にmodelのデータをFluentdに渡します
<?php
    class model {
        protected static $_observers=array(
            'Fluentd\Observer_Td'=>array(
                'events'=>array('after_save')
            )
        );       
    }

これでmodelでsaveメソッドが実行された時にsaveされたデータをFluentdに 渡すことが出来ます

これと同様(特に1, 2の部分)にしてFuelPHPデバッグログやエラーログをFluentdに渡すことも出来ます

PHPのMemcachedモジュールをインストール

PHPのMemcachedモジュールを入れるときにハマりました

 

# yum install memcached libmemcache libevent-devel

これでMemcacheの準備OK

PHPのモジュールをPECLでインストールする

# pecl install memcached

# echo 'extension=memcached.so' >> /etc/php.d/memcached.ini

これで入ったと思って以下のコマンドで意気揚々と確認

# php -i | grep mem

 

こんなWarningが出ていた

 

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/memcached.so' - /usr/lib64/php/modules/memcached.so: undefined symbol: memcached_touch in Unknown on line 0

 

ん?????

PECLで失敗した?

pecl.php.netからmemcachedの最新版をダウンロードし, 

# phpize

# ./configure

# make

# make install

 

今度こそと思い確認

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/memcached.so' - /usr/lib64/php/modules/memcached.so: undefined symbol: memcached_touch in Unknown on line 0

 

ええええええ

 

Googleで検索してみるも情報が全然出てこない

古いバージョンのインストールを試しても一向に変わらない

 

諦めていたその時, githubにそれっぽいものが!!!

https://github.com/php-memcached-dev/php-memcached

 

ログ見たら同じWarningを直しているっぽい

早速試す

 

# git clone https://github.com/php-memcached-dev/php-memcached.git

# cd php-memcached

# phpize

# ./configure

# make

# make install

 

どうせ・・・と思いつつ確認

 

Warningがでていない!!!!!!!

 

というわけで3時間位ハマった問題も無事直りました

 

パッケージのバグもgithubで直される時代なんだなと今更ながら思いました

githubバンザイ!!!!!

これからはgithubも探すようにしよう

ISUCON3にPHPerが参加した<本戦>

前回の記事からしばらく経ちました

昨日前回書いたISUCON3の本戦に出場してきました

 

結果は測定に失敗してしまってFAILでした

いやいや, 悔しい

せめてスコアは出しておきたかった

帰ってきてから悔しさが倍増してしまって, Jenkinsで色々遊んでしまいましたw

という訳で本戦のまとめでも

  • 内容
    • 画像版Twitter
    • とにかくたくさんの画像をImage Magicがゴニョゴニョしてる
    • アプリケーションの入ったサーバ1台 + その他のサーバが4台渡される
  • 思ったこと
    • 今回はアプリケーションよりもアーキテクトの戦いだった
    • 予選と同様にxhprof入れたけどそんな役にたたなかった(SQLのexecで時間かかってる, sleep入ってるとかそのくらい)
    • 複数台のサーバでxhprof管理するの大変だから入れないほうが良かったかも
      これについてはメンバーに結構迷惑かけました ごめんなさい
    • アプリケーションの勝負じゃないので早めに戦略をちゃんとたてるべきだった
    • Nginxのリバースプロキシでバランシングをほとんどのチームでやってた
    • PHPを選んだのが自分のチームだけとは。。。
    • Ruby + Goとか色々組み合わせる選択肢があるチームがいて感動した

 

まあ結論から言うと勉強不足です

来年も出場して今度こそPHPerの地位を向上させたいと思います