2013/06/30

[ExtJs] Ext.form.DateField に On changeイベントを定義

 extjs - On change event Ext.form.DateField
 - Stack Overflow http://stackoverflow.com/questions/3247948/on-change-event-ext-form-datefield

new Ext.form.DateField({
            id: 'date_from',
            format: 'd/m/Y',
            editable: false,
            listeners: {
                 change: function (t,n,o) {
                      console.log('t');
                 }
            }
 });

t=DateFieldのオブジェクトが入る → t.valueとかで 値が取れる
n=選択された日付
o=よくわからん

●ついでに javascriptでの Dateをフォーマットする方法
・・・jQueryで フォーマットできるかと思ったのに・・・見つけられなかった・・・orz

// dateFormat JP
function dateFormat(date) {
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  var d = date.getDate();

  m = ('0' + m).slice(-2);
  d = ('0' + d).slice(-2);

  return y +  m +  d;
}

参考)
 JavaScript で日付のフォーマットを整形する - tacamy memo http://tacamy.hatenablog.com/entry/2013/03/14/220831

 

2013/06/26

[PostgreSQL] IDを 0埋めで 登録し直す

既に 登録済みの ID(1~連番)を 1で始まる全10桁の数値に 振り直したい

例)
旧ID 新ID
1 10000000001
2 10000000002
3 10000000003
4 10000000004
5 10000000005

↑こんな感じ

UPDATE table_name SET id= cast(1||lpad(''||id, 9, '0') as bigint);

●解説
lpad(''||id, 9, '0') 
→ 左埋め '0'(引数3番目)で9桁(引数2番目)0埋め(3番目省略すると、空白で埋められる)
→ ''||id は、idがbigintのため ''空文字列を結合して stringにしてやる(lpadの引数1番目はstringじゃないと怒られる)

cast(1||lpad(''||id, 9, '0') as bigint)
→ 0埋め処理した文字列を cast()で bigintに戻してます

TwitterAPIが何度やっても 401「Failed to validate oauth signature and token」を返してくる

自戒の念を込めて メモ

TwitterAPIの廃止、ver1からver1.1へのアップデートの対応で
既存のサービスが利用している APIの調査確認をした時
ちゃんと ver1.1に合わせた設定に変えたのにもかかわらず
何度 リクエストしても 401「Failed to validate oauth signature and token」が返ってくる現象に悩まされ、
約半日を無駄にしたことがありました

結局原因は、リクエストを投げてるサーバのdateがずれていたという(約30分くらいずれていました)
しょーーーーーーもないことで・・・・自分で自分に腹が立つやら情けないやら・・・・

ということで、既存で動いていたAPIが いきなりエラーで動かなくなったよ!という時は、
まず
★TwitterAPIに限らず、たいていのAPIは リクエストトークンなどにタイムスタンプを含めていることが多いので、サーバのdateを確かめる!

それから、TwitterAPIの場合、テスト用アプリが BAN(停止)食らってると 401エラーになるそうなので、
★ちゃんとアプリが生きているか?もしくは、新規でアプリを作成して確認してみる

余談ですが、今回のver1.1への対応、
たいていのAPIは エンドポイントのバージョン番号部分を、1→1.1にすればOKですが

例)http(s)://api.twitter.com/1/*** → http(s)://api.twitter.com/1.1/***

それでも 「statuses/update_with_media」←このAPIがエラーで、リクエストが取得できなくて、
公式をよくよく確認したら ドメイン部分も変更になっていました

●statuses/update_with_media
https://upload.twitter.com/1/statuses/update_with_media.json
 ↓
https://api.twitter.com/1.1/statuses/update_with_media.json

やっぱり、公式のドキュメントを確認するのが確実です

●REST API v1.1 Resources | Twitter Developers https://dev.twitter.com/docs/api/1.1

参考)
Twitter APIと開発者規約変更のインパクトまとめ:結局、Twitter API 1.1で何が変わる? 5つのポイント - @IT
http://www.atmarkit.co.jp/ait/articles/1209/26/news120.html


2013/06/22

[CakePHP2.x][PostgreSQL] ConnectionManagerで DBのテーブルとフィールド定義を取得してみる

Class Postgres | CakePHP http://api.cakephp.org/2.3/class-Postgres.html

// getDataSource
$db = ConnectionManager::getDataSource(string Model::$useDbConfig);
  →Model::$useDbConfig databaseの設定名 'default'とか
  →ModelObject->useDbConfigで取れる e.g. $this->Model->useDbConfig

// an array of tables in the database.
$tables = $db->listSources();

// Fields in table. Keys are name and type
$data = array();
foreach ($tables as $table) {
  $fields = $db->describe(strtolower($table));
  $data[$table] = $fields;
}

// $dataに テーブルとフィールドの定義が入る
Array
(
    [table_name] => Array
        (
            [id] => Array
                (
                    [type] => integer
                    [null] =>
                    [default] =>
                    [length] =>
                )
            [name] => Array
                (
                    [type] => string
                    [null] =>
                    [default] =>
                    [length] => 512
                )
            [update_id] => Array
                (
                    [type] => text
                    [null] =>
                    [default] =>
                    [length] =>
                )

            [regist_date] => Array
                (
                    [type] => datetime
                    [null] =>
                    [default] =>
                    [length] =>
                )
        )
)

[CakePHP2.x][Console][Shell] 基本構造 コンソールログ出力など

 参考)
 Console and Shells — CakePHP Cookbook v2.x documentation http://book.cakephp.org/2.0/ja/console-and-shells.html
 

その他参考)


CakePHP2.xでは Shellsの置き場は変わってる
      → app/Console/Command

    public function main() {
       // 標準出力
       $this->out('This is the standard log.');
       // 区切り線
       $this->hr();
       // 標準出力 改行なし
       $this->out('hogehoge......', false);
       $this->out('fugafuga.');
       $this->hr();
       // エラー出力
       $this->err('This is an error.');
       // エラーメッセージを出して 強制終了
       $this->error("Error Occurred!!!!", ">> stop the script.");
    }

#出力
Welcome to CakePHP v2.2.5 Console
---------------------------------------------------------------
App : app_hoge
Path: C:\workspace\app_hoge\
---------------------------------------------------------------
This is the standard log.
---------------------------------------------------------------
hogehoge......fugafuga.
---------------------------------------------------------------
This is an error.
Error: Error Occurred!!!!
>> stop the script.

2013/06/19

第6回テックヒルズ Let’s study Jenkins ~さまざまなケーススタディ~

2013/06/18に 六本木ヒルズ 49F アカデミーヒルズで行われた
「第6回テックヒルズ Let’s study Jenkins ~さまざまなケーススタディ~」に参加して来ました


詳細)

テックヒルズ|オフィシャルサイト | プログラム&プレゼンター http://www.techhills.net/#!-program/ceec

700人を超える参加者で、テストへの開発現場の関心の高さが伺えるイベントでした

セッションは、タワーホールとスカイスタジオと2会場で 行われましたが
私は タワーホールのセッションのみ参加しました(単に移動がめんどくさかった(  ° ω ° ;  )

いろいろな 会社の方の導入ケースや、対策等のお話が聞けて、とても参考になった意義のあるセッションでした

以下は、個人的メモです
青文字は、わたくし追加の参考リンクです


「Aiming における Jenkins 活用事例(仮)」
株式会社Aiming / 黒木 慎介

増えていくテストで 自動でまわすためにおこなったこと
→ 黒木さん:railsエンジニア

テストの実行頻度と戦ったお話

・プロジェクト概要
RoR+coffeeScript+backbone.js+α

・テストツール
RoR:Rspec(ci_reporter→結果をXMLで出せる
js:Jasmine

参考)
Javascriptテストフレームワーク Jasmineを試す | nacika http://nacika.com/entry/2013/01/03/055820/

・増えるテスト件数
テスト、最初は5分、10分で終わってた・・・
プロジェクトが進むにつれて、テスト7000件越え・・・
全件実行が難しい

・対策
分割して並行に実行
スレーブを 2台から6台に

●テストをカテゴリ別に分類する
→ラベル付
ジョブの設定画面でラベル式・・・ プロジェクトとカテゴリーを実行する みたいに設定できる

→join plugin(プラグイン)
実行に条件が付けられる
AとBが うまく行ったら Cを実行するみたいな

→build Pipeline(プラグイン)
実行を視覚化

●実行頻度との戦い
Gerrit Trigger Plugin
→変更箇所 すべてにはしらせるので 数が多いと問題
→無駄なテスト実行は減らしたい
     変更されたものの、元ソースまではテストしたくない・・・など

・Jenkins心構え
Jenkinsがやってくれるのは自動化だけ
Pluginのドキュメントをちゃんと読むこと
→ Plugin wiki
→ それでもわからんとき・・ コードも読む インフォメーションからソースのrepositoryへ飛べる

★Jenkins運用の流れ参考
・ビルド
・テスト実行
・デプロイ
・サーバ再起動
・データチェック

Aimingさんのところでは、エラーのアラートはスカイプ、メールで飛んでくる( ・∀・)イイ!!

黒木さんの発表スライド:
進行中の開発プロジェクトで増えていくテストを自動で回し続けるために行ったいくつかのこと // Speaker Deck
https://speakerdeck.com/skuroki/jin-xing-zhong-falsekai-fa-puroziekutodezeng-eteikutesutowozi-dong-dehui-sisok-kerutamenixing-tutaikutukafalsekoto

その他参考)
Jenkins Gerrit Trigger Plugin の使い方 | Aiming 開発者ブログ http://developer.aiming-inc.com/ci/jenkins-gerrit-trigger-plugin-usage/





「検索基盤開発の為の統合テスト環境の自動化」
楽天株式会社 / 荻野 恒太郎

・コンポーネントの結合
→ =仮説の検証
・結合テストの自動化

【4つの課題】
複雑さ
     単体:コンポーネント単位でテスト
     結合:単体レベルでは行えないようなテスト
コスト
     結合テストのためのフレームワーク開発をした
実行時間
     テストを、細分化する
     ちっちゃいテストをして、通ったものだけ 結合テストへ進める
結果の再現性
     毎回テストごとに、環境のクリーンアップ・インストール・データの投入をしている
          >毎回 環境を同じにする

          >結果を保証する


使用プラグイン
Priority Sorter Plugin
→ テストの実行優先度を変えることができる

テスト自動化のメリット
>開発の早い段階から、結合レベルのバグを 発見することができる
>開発の最後の方は、より 密度の高いバグ対応に専念できる(序盤の方で、軽度のバグ対応がすんでしまうので)
>要件・仕様変更に 柔軟に対応できる

楽天さんでは、コミット前テストにパスしたものだけ コミットする仕組みを採用している。これはいいなと思った。



「CROOZにおけるJenkins活用事例(仮)」
クルーズ株式会社 / 鈴木 優一

日々の開発の中での、保守・運用 問題解決法のはなし

・コーディングスタイルの共通化は むずかしい
>どうしたって、 属人化が起こる

・ルール違反や オペミスを起こしそうな コード・設定を プログラマにフィードバックする仕組みが必要
>機械にやらせる=Jenkins

・Jenkinsの決め手
構築が容易
プラグインの充実
ジョブ管理ツールとしても使える
     >リモートシェルとしても使える
テスト対象の実装言語は なんでもOK
ドキュメント豊富

・事例
規約チェックの自動化
>使用しているプラグインなど
     PHP Code Sniffer(イクリプスにも プラグインある PDT)
     VenusBase(びーなすべーす)・・・クルーズさん独自の定義ファイル

参考)
{Jenkins x CakePHP2 (3/6)} Jenkins からコーディング規約をチェックする / マスタカの ChangeLog メモ http://masutaka.net/chalow/2011-12-30-3.html

PHP_CodeSniffer+ Eclipse + PHP Code Formatter Pluginでコーディング規約を守ったコーディング - PPl@ce http://pplace.jp/2011/05/73/


・GitList(PHP)
→ PHP製 Git ブラウザ
madroom project: PHP製のGitビュアー、"GitList 0.3"をちょっと直して使ってみた http://madroom-project.blogspot.jp/2013/01/phpgitgitlist-03.html

・運用の流れ
Eclipseで、コード規約チェック(PHP_CodeSniffer)を使用した開発を徹底。
その後、Jenkinsでさらに、規約チェックの他、問題になりそうなコードをチェック
アラートは開発者へフィードバック・・・というながれ。

・将来的に(・・・いろいろあった中で)
>修正箇所の、自動チケット化
↑これはいいかも

鈴木さんの発表スライド:
Croozにおけるjenkins活用事例20130618



「ぼくとJenkinsおじさんとの300日戦争(仮)」
株式会社ミクシィ / 五嶋 壮晃

・テスト高速化への取り組み
採用してるオプション
     Prove
     TAP

並列実行の問題と fixture

モジュール読み込み時間短縮
     forkprove

fixtureで 生成したDBをキャッシュする 

・・・などなど
↑色々模索中らしいです、が・・・


結局 今んとこの解決方法は 力技!!!w(テストのサーバを48台に・・・・)

ジェンキンスの問題
A(先行)とB(後行)のテストがあった時
Bが 先に実行終わっても、先に走ってるAの実行が続いてるので待たされる(らしい

おまけ)
mixiさんちの 1分ライブ宣伝ありました
>deploy gate フリープランあるよ
DeployGate - 開発中のアプリの配布を、びっくりするぐらい簡単に https://deploygate.com/

なんとmixiがAndroidアプリのテストサービスをリリース、iOSテストツールにも期待したい - apptoi | apptoi http://apptoi.com/archives/7743




「piggとJenkinsと私(仮)」
株式会社サイバーエージェント / 丸山 隆司

【ケーススタディ】
・コードの品質管理
・バッチ制御
・オペレーションの自動化
 
・コードの品質管理
~バグの発生を抑える

CI環境の整備 ・・・基本的なこと
その警告ほんとうに必要??・・・
     一部のコードは解析対象から外す
     >DTO(getter/setterのみ)やテストコード
     >コンストラクタでの フィールドの初期化
     >javadoc

・バッチ制御
~責務の分離と可視化

57本のバッチが動いてる(2013年6月現在)
     不要データ削除
     ログの収集

【問題】
新旧バッチサーバ混在
ジョブの実行もバラバラ(クーロンだったり SpringBatchだったり)
     ↓
Jenkinsで対応 >Jenkinsからバッチをキックする
・スケジューリング
・実行記録の保持

・RemoteAPIを利用した Jenkinsそのものの監視(これはちょっと興味深い)
> キューイングされているジョブがないか?
> 同一ジョブの多重実行がないか??

今後の問題
Jenkinsの 権限の話
> 現状は 誰でもジョブが実行できる問題

・オペレーションの自動化
~同じ過ちは繰り返させない

本番リリースミスなどの、起こしてはならない 自体への対処



Jenkinsで サーバのモニタリング
・リソースの差分チェック
     サーバ間のソースの差異をチェック
     本番/待機系間のソースの差分をチェック
・リマインダ機能

今後の展望・・・・
シェルをゴリゴリ書けば、色々できるらしい・・・
>稼動系の切り替えとか
>デプロイ・リリースとか

最後に・・・
Jenkins・・・
途中から入れるのはめんどい・・・・「はじめから入れようぜ!!!」

丸山さんの発表スライド:
アメーバピグとJenkinsと私 - SSSSLIDE http://sssslide.com/www.slideshare.net/tksmaru/jenkins-for-sharing



__以上__

↓以下は 今回の頂きものです

2013/06/09

CSS3 スタンダード・デザインガイド【改訂第2版】 が素晴らしい

先日
webデザイン系の友人が絶賛していたので、まよわず即購入。



CSS3 スタンダード・デザインガイド【改訂第2版】 (Web Designing Books)


まず、とにかく見やすい、わかりやすい
CSSの 各プロパティの解説が、基本1プロパティ1ページ(以上)ずつ、オールカラーで解説されています。
見やすく洗練されたレイアウトで解説されているので、わかりやすいし、探しやすいです。
オールカラーっていうのも、ぱっと頭に入ってきやすいですよね。

そして、圧倒的な情報量
タイトルには CSS3とありますが、基本CSS2.1がベースとして解説されてて、CSS3で追加されたプロパティについてはわかりやすいアイコンがついています。
ちょっと先取りしたCSS4についての情報まで、合わせて解説されています。
CSSの 各プロパティ、1つ1つについての解説も、抑えておくべきところの解説が、シンプルにわかりやすくまとまっていて、ブラウザ対応状況は、PCだけに限らず、Android&iOSの対応状況も 一目見てわかるようになっています。
前半は、基本的な CSSプロパティの解説。後半には、スマホ開発向けの、スマホブラウザで使えるCSSのプロパティ解説も載っています。


初心者の方なら、まず全部に目を通してみて、詳細まで覚えなくても「ああ、CSSでこんなことができるんだな~」ということを感じてもらえると思います。

ある程度 CSSに知識のある方なら、最新のリファレンス本として そばにおいて置ける本だと思います。

私は普段は開発がメインですが、マークアッパーさんから上がってきたデザイン(HTML等)をシステムに乗せたときに、ある程度の調整は必ず発生します。
この本があれば、ある程度の調整はマークアッパーさんに差し戻さなくても対応出来ますので、コレはいい本に巡り会えたと思って小躍りしております。

マークアッパーさんもそうですが、開発の方にもぜひ一度お手にとっていただきたい。

ちなみに 電子版もあるようですよ。iPadなどを持ち歩いてる方はこちらがいいかもですね。




CSS3 スタンダード・デザインガイド【改訂第2版】 [リフロー版]