grunt-contrib-cssmin で圧縮したときにプロパティが消える問題
1つのセレクタ内に同じプロパティを複数宣言してると最適化されて消されるっぽい。
そんなときは Gruntfile に以下のオプションを追加すると最適化されなくなるのでプロパティが消えなくなる。
options: { noAdvanced: true }
設定例は以下。
cssmin: { minify: { expand: true, cwd: 'static/dist/css/', src: ['**/*.css', '!**/*.min.css'], dest: 'static/dist/css/', ext: '.min.css', options: { noAdvanced: true, } } }
grunt-contrib-cssmin のREADMEには書いてないけど、clean-css のREADMEには書いてある。
そしてこの issue を見るに clean-css のオプションはそのまま Gruntfile で指定できるっぽい。
FlaskでRequest関連のテストをしたいとき
Flaskのテスト関連メモ
調べたことの雑多なメモ。かなりてきとうです。
テストツールを探す
とりあえず以下の視点で探した
- デバッグしやすさ
- 結果の見やすさ
- 導入の容易さ
- coverageとか見れる
- fixtureとか簡単につくれる
結果
とりあえず以下を使うことにした
- pytest
- pytest-cov (coverage)
- flask-testing (utility)
- factoryboy (fixture)
- SQLAlchemy
なんとなくの理由
- flask関連の情報が多いのはnoseだが、pytestのほうが結果が見やすくデバッグしやすいらしいので
- noseもpytestも導入自体は簡単
- pytestでcoverageを見るにはpytest-covがデフォらしい
- flask-testingは色々便利なメソッドがつまってる(はず)
- self.app, self.client などがデフォルトで定義されている
- 使用したテンプレートや、コンテキストを確認するassertなども定義されていて便利
- factoryboyはflask関連では情報が少ないが、fixtureってやつよりなんとなく情報量が多そう
- ORMはSQLAlchemy一択という感じらしいのでそれと連携させる
参考記事
- noseを使用
- viewはFlask付属のテストクライアント
- ロジック部分は普通のunittest
How I Structure My Flask Applications
- ツールは nose, factoryboy, mock がいいよ
- factoryboy は fixture 生成できるっぽい、モデル(ORM)利用が前提?
- rootのtestsディレクトリ以下に全てまとめる
- test用の設定は tests.settings
- factoryboy用の設定は tests.factories
- ユーティリティ系は tests.utils
- FlaskTestCaseMixinにassertなんかも作ってそこにまとめてある
- TestCaseのベースクラスを作ってそれを継承
- 共通のfixture, setUp, tearDown なんかは全てここ
- 機能毎に tests.api, tests.frontend などのモジュールを定義している
- 基本的にrequestのテストしかやってないっぽい
- レスポンスのjsonとかステータスコードを見るだけ
prschmid: Setting HTTP Request Values For Flask Unit Testing
- テストクライアントのHTTPリクエスト内容を変更したければProxyClass作ってみるとよいかも
GracefulExit - Flask と Alembic とテスト
- Alembic で DBスキーマの管理ができるらしい、SQLAlchemyとセットで使うとか
Application Factories — Flask 0.10.1 documentation
- この概念を用いるととてもよくなるらしい
- blueprint を適用しているやつだとなおさら?
The Flask Mega-Tutorial, Part XVI: Debugging, Testing and Profiling - miguelgrinberg.com
- werkzeugのProfileMiddlewareを使えばviewのパフォーマンスを計測できる
- coverage重要そう
Flask-Testing — Flask-Testing 0.3 documentation
- 便利なメソッドとかを生やしたUnitTestクラスを提供するもの?(パっと見)
- template context をassertできるっぽい
- これだけでも使う価値あり?
Testing Flask Applications — Flask 0.10.1 documentation
- 公式ドキュメント、基本的なテスト方法の手順を記載
vimで増えすぎたスワップファイルからファイルを復元する
vimで同名ファイルのスワップファイルが作成される場合、 .swp, .swo, ..., .sva, ... みたいに作成される毎に拡張子を一文字ずつずらしていくらしい
自分の場合、vimrcのdirectoryに /tmp
以外を指定していたので、
自動削除されずに無名のスワップファイルがすごい量になっちゃってて拡張子が*.sss とか *.srv までいっていた
拡張子毎の復元方法
1. *.sw[a-z]
ファイル名指定、スワップファイル直接指定で復元可能 ファイル名指定で復元候補に表示されるのもこの拡張子の範囲まで
Windowsで無名ファイルを復元する場合
:recovery _ :recovery /tmp/_.swp
vim -r _ vim -r /tmp/_.swp
2. *.s[uv][a-z]
スワップファイル直接指定でのみ復元可能
Windowsで無名ファイルを復元する場合
:recovery /tmp/_.svz
vim -r /tmp/_.svz
3. *.s[uvw][a-z] 以外
*.s[uvw][a-z] の範囲内に拡張子をリネームして、上記1か2を実行する
Windowsで無名ファイルを復元する場合
!mv /tmp/_.stz /tmp/_.sua :recovery /tmp/_.sua
mv /tmp/_.stz /tmp/_.sua vim -r /tmp/_.sua
:recovery や vim -r でファイル名指定で復元できるのは
*.sw[a-z] だけ、*.s[uv][a-z] は スワップファイル自体を直接指定する必要がある
それ以外の拡張子は *.s[uvw][a-z] の範囲内に拡張子をリネームしてから復元を実行する
*.s[uvw][a-z] なファイルは vim -r _.sua
や :recover _.sua
みたいに直接swapファイルを指定しても復元できる
ただ *.stz からはダメっぽい。
そうなったら素直にswapファイルとして解釈してくれる範囲内に拡張子をリネームして、実行すればうまく復元してくれる
Nagios で何も考えずに複数人に通知したいときの適当な設定
※ この記事の内容は2013年8月頃にメモしたものです
諸々オブションはあるけど、 何も考えずにグループ分けした複数人に 通知を設定したいときの最低限の方法
環境
- Nagios 3.4.1
コンタクトの設定
/etc/nagios/objects/contacts.cfg
# Contact # 個別の通知先を定義する # デフォルト定義済テンプレートのgeneric-contactをuseする # それ以外の設定を使いたい場合は個別の項目を変更すればできる? define contact{ contact_name taro.yamada use generic-contact alias Taro Yamada email taro.yamada@example.com } define contact{ contact_name jiro.tanaka use generic-contact alias Jiro Tanaka email jiro.tanaka@example.com } # Contact Group # 通知先をグループにまとめて定義する define contactgroup{ contactgroup_name example alias Example Group members taro.yamada,jiro.tanaka }
サービスの設定
/etc/nagios/servers/hoge.cfg
# それぞれのサービス定義に通知してほしい contact_groups を追加する define service { use local-service host_name hoge service_description PING check_command check_ping!160.0,20%!500.0,60% contact_groups example }
設定反映
コマンドで確認して
/etc/init.d/nagios checkconfig
設定反映
/etc/init.d/nagios reload
参考
ありがたや
PHP だと taglist.vim に class と variables しか表示されないんですけど
この記事の内容は2012年8月頃にメモしたものです
原因は ctags が 古いからっぽい
ctags を update すれば解決する
5.6-1.1 -> 5.8 に update した。
# yum remove ctags # cd /usr/local/src # wget http://prdownloads.sourceforge.net/ctags/ctags-5.8-1.src.rpm # rpmbuild --rebuild ctags-5.8-1.src.rpm # rpm -ivh /usr/src/redhat/RPMS/x86_64/ctags-5.8-1.x86_64.rpm # ctags --version Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert Compiled: Aug 20 2012, 20:29:01 Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net Optional compiled features: +wildcards, +regex
参考
Tricorn Labs » ctags でサクサクコーディング。
ありがたや
なんとなくモダンっぽいPHP環境をつくって yii framework を導入するところまで
- この記事の内容は2013年8月頃にメモしたものです
- なんか未完成っぽいけどめんどいのでそのまま公開
環境
開発環境として利用していて、 既に古いPHPや諸々のライブラリは導入されている状態
PHPのインストール
phpenv
git clone https://github.com/CHH/phpenv.git cd phpenv/bin sh phpenv-install.sh
.zshrc に以下を追記
export PATH=$HOME/.phpenv/bin:$PATH eval "$(phpenv init -)"
設定を反映
source ~/.zshrc
phpenv コマンドが有効になる。
実行したら rbenv って表示されるけど気にしない、ことにする…
php-build
mkdir ~/.phpenv/plugins cd ~/.phpenv/plugins git clone https://github.com/CHH/php-build.git
phpenv でinstallコマンドが使えるか確認
phpenv install
成功していればPHPのバージョンがガーーッと出てくる
PHP 5.5
phpenv install 5.5.3
事前に依存パッケージを入れておく。 自分の環境には以下がなかった。
sudo yum install re2c libcurl-devel libmcrypt-devel libtity-devel
バージョンを確認
phpenv versions
globalのphpを切り替え
phpenv global 5.5.3
なんかうまく切り替わらない場合は
phpenv rehash
したり source ~/.zshrc すれば戻る
あとでdate()云々で怒られるのでphp.iniを編集
vim ~/.phpenv/versions/5.5.3/etc/php.ini
timezoneを設定しておいい
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Asia/Tokyo
Composerでyiiのインストール
アプリケーションを構築したいディレクトリに移動して
curl -s http://getcomposer.org/installer | php
カレントディレクトリに composer.phar ができる
試しに composer.json を作成する
{ "require": { "yiisoft/yii": "1.1.*" } }
次のコマンドを実行してインストール
php composer.phar install
カレントディレクトリに vendor というディレクトリが作成されて 中に諸々がインストールされている
必要要件を満しているか確認 ビルトインWebサーバを立ち上げて確認してみる
php -S localhost:8080
http://localhost:8080/vendor/yiisoft/yii/requirements/
「Yii Requirement Checker」が表示されて、 各項目の条件が一覧できるのでとりあえず確認
yiiについてもろもろ
- Core framework code style · yiisoft/yii Wiki
- コーディング規約
- インデントはタブ必須らしい
- なんとなくPython使いからするとテンションさがる
- Ardem/yii-coding-standard
- CodeSnifferも用意されているので Git commit hook とかに適用させれば幸せになるかもしれない
- yii-webserver つかえる
- yii-standard-coding 便利
- ただジェネレートしたコードがERRORになるし
- giiの中のコードもエラーになる
- Gitで扱うときのyiiの雛形作成にはvcsオプションが便利
- こんな感じ:
yii webapp foo git
- 適切な位置にgitignoreとかを配置してくれる
- こんな感じ:
参考
- モダンなPHP開発環境を構築する – phpenv + php-build で 複数のPHPバージョンを管理する | Creator Life
- php-buildで複数バージョンのPHP-FPMを用意する - hnwの日記
- phpenv + php-build + composer で開発環境作ってみた | 69log
- PHPの外部ライブラリの管理にComposerを使う | Ryuzee.com
- Creating Yii applications with composer | Wiki | Yii PHP Framework
- Ubuntu に phpenv を入れて複数バージョンのPHP管理しようとした - Qiita
- Homebrew で Apache, PHP, MySQL, Composer をインストールして Yii Framework を動かすところまで - Qiita
ありがたやありがたや