RoRで アプリから httpのAPIへ post送信する プログラムを実装してたら
わけわからんエラーでハマった
#<WebMock::NetConnectNotAllowedError: Real HTTP connections are disabled. Unregistered request: POST http://~(APIのURL)
なんぞ?
ググりまくったら とあるスレッド発見
Trying to get selenium working in rails 3 - "WebMock::NetConnectNotAllowedError" - Stack Overflow http://stackoverflow.com/questions/5980856/trying-to-get-selenium-working-in-rails-3-webmocknetconnectnotallowederror
↑Answersを グーグル先生翻訳
あなたはwebmockを使用しているからだ。これは、すべての発信HTTP要求をブロックします。
あなたがそれを必要としない場合は、Gemfileからそれを削除してください。あなたがそれを必要としない場合は、あなたのニーズに、より正確にそれを設定する必要があるかもしれません:
あんだって????
Gemfileを確認したら たしかに webmock が developmentに設定されていた
しかも動作確認は RAILS_ENV=developmentでやってた・・・
RAILS_ENV=production で起動しなおし、動作した こんなことだったなんて・・・
2013/09/30
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;
}
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
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] =>
)
)
)
$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] 基本構造 コンソールログ出力など
参考)
CakePHP2.xでは Shellsの置き場は変わってる
Console and Shells — CakePHP Cookbook v2.x documentation http://book.cakephp.org/2.0/ja/console-and-shells.html
CakePHPでコンソールアプリを作るときの基本 | 1000g http://1000g.5qk.jp/2010/07/06/cakephp%E3%81%A7%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E5%9F%BA%E6%9C%AC/
その他参考)
CakePHP 2.x で Cron を使う | X->A->O - Part 1 http://blog.xao.jp/blog/cakephp/cakephp-2-0-%E3%81%A7-cron-%E3%82%92%E4%BD%BF%E3%81%86/
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.");
}
// 標準出力
$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.
---------------------------------------------------------------
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 ~さまざまなケーススタディ~」に参加して来ました
いろいろな 会社の方の導入ケースや、対策等のお話が聞けて、とても参考になった意義のあるセッションでした
以下は、個人的メモです
青文字は、わたくし追加の参考リンクです
黒木さんの発表スライド:
進行中の開発プロジェクトで増えていくテストを自動で回し続けるために行ったいくつかのこと // Speaker Deck
https://speakerdeck.com/skuroki/jin-xing-zhong-falsekai-fa-puroziekutodezeng-eteikutesutowozi-dong-dehui-sisok-kerutamenixing-tutaikutukafalsekoto
「検索基盤開発の為の統合テスト環境の自動化」
「第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/
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
アメーバピグと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版】 [リフロー版]
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版】 [リフロー版]
2013/04/19
[cakePHP2.x][log4php] log4phpでログにREMOTE_ADDRやHTTP_USER_AGENTを出したい
●bootstrap.php
/**
* Configures Logger
*/
App::uses('CakeLog', 'Log');
CakeLog::config('log4php', array(
'engine' => 'log4php.Log4CustomLogger'
));
LoggerMDC::put( 'REMOTE_ADDR', @getenv( "REMOTE_ADDR" ) );
LoggerMDC::put( 'HTTP_USER_AGENT', @getenv( "HTTP_USER_AGENT" ) );
/**
* Configures Logger
*/
App::uses('CakeLog', 'Log');
CakeLog::config('log4php', array(
'engine' => 'log4php.Log4CustomLogger'
));
LoggerMDC::put( 'REMOTE_ADDR', @getenv( "REMOTE_ADDR" ) );
LoggerMDC::put( 'HTTP_USER_AGENT', @getenv( "HTTP_USER_AGENT" ) );
→Logエンジン指定したあとに、LoggerMDC::put() で追記
●log4php.properties
log4php.appender.APP.layout.ConversionPattern=%d [%t][%X{REMOTE_ADDR}] %-5p %c - %m - %X{HTTP_USER_AGENT}%n
→%X{key}で 任意のフォーマット追加
参考)
Log4J徹底解説~Log4PHPの使い方 http://www.nurs.or.jp/~sug/soft/log4j/log4php1.htm
2013/04/04
2013/04/03
[Eclipse] SVN diff 比較で文字化け
いつも忘れるのでメモ
設定→一般→コンテンツ・タイプ
テキスト > エンコードタイプを変更したいファイルの拡張子を選択
「デフォルトエンコード」欄にUTF-8
設定→一般→コンテンツ・タイプ
テキスト > エンコードタイプを変更したいファイルの拡張子を選択
「デフォルトエンコード」欄にUTF-8
2013/02/28
[php] 配列から空要素を取り除く
目からうろこだったのでメモ
$hoge_array = array("", "", "hoge"); $fuga_array = array_diff( $hoge_array, array( "" ) ); print_r($fuga_array );
参考)
phpで、array(配列)の空要素を取り除く - カサヒラボ http://d.hatena.ne.jp/kasahi/20070605/1181027762
2013/02/03
[Mac][MBA(Lion)] php.ini設定
MacでPHP動かしたら mktime()でWarningが出て怒られた
「Warning: mktime(): It is not safe to rely on the 〜」とかなんとか
エラーメッセージ見ると なんか timezoneを設定してよとかいってるぽい
php.ini の 「date.timezone =」を設定してやる必要がある
━━━━━━━━━━━━━━━━━
まず、Macに入ってるPHPは 最初から入ってるやつだから
php.iniどこにあるんだか知らない
とりあえず php infoをターミナルで表示してみる
---------------------
$ php -i | grep ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /private/etc/php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
:
:
(略)
---------------------
/etc にあるらしい
Scan this dir for additional .ini files が noneだと????(ま、いいや
/etc 配下を見ると
-r--r--r-- 1 root wheel 69337 7 8 2011 /etc/php.ini.default
こいつを
cpして(/etc 配下は root権限じゃないと何もできないから、以後 sudo必須)
$ sudo cp php.ini.default php.ini
read onlyだから ぱーみっそん変更して編集
$ sudo chmod 664 php.ini
$ sudo vi php.ini
---------------------
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = 'Asia/Tokyo' ←こんなかんじで。
---------------------
再度、php実行してみて Warningでなかった OK(・ω・)b
2013/01/11
[linux] diffコマンド 改行コード無視
オプション
--strip-trailing-cr
例)
diff -u --strip-trailing-cr linux.txt windows.txt
参考)
http://d.hatena.ne.jp/youhey/20091028/1256748465
--strip-trailing-cr
例)
diff -u --strip-trailing-cr linux.txt windows.txt
参考)
http://d.hatena.ne.jp/youhey/20091028/1256748465
2013/01/07
登録:
投稿 (Atom)