まおさんの備忘録

会社やら家やらで調べた事に関する備忘録

Vagrant(CentOS)+ grunt +windows で トースト通知を出す

結構探したけどなかなか探しづらかった。。orz
(だって、最近みんな開発winでやってないからさ、、、)

本題。


gruntから通知を出すのに、開発環境=今触ってるOSだったら何の問題もなく
grunt-notfy 入れれば出てくれるんだけど
vagrant上から 通知を出す方法がなかなかなくてだな・・・

以下をインストールする。

1.vagrantファイルのあるところで、以下のコマンドを実行してインストール
CentOS上からの通知情報を、ホストOSへ転送するプラグイン

vagrant plugin install vagrant-notify

2.win上で通知をだすコマンドをインストール
http://vaskovsky.net/notify-send/

zipをDLして、pathの通ってるところへ配置すれば完了。
どこかに配置して、pathを通すのが正しい方法かな・・・←

3.grunt-notify を実行するべく、設定を追加。
これについては参考URLなどなどを見た方が早くて←

本家:
GitHub - dylang/grunt-notify: Automatic Notifications when Grunt tasks fail.

私が参考にしたところ:
log.chocolateboard.net


この三種の神器でwin上でデスクトップ通知がでたわわあああああ。
(スクショなくてすまん)

gruntでminimizeするのに、更新したファイルだけしたい

今更gruntですいません。
これだけで十分早いので、満足しちゃってる私です。

今回、調べてもなかなか情報が出てこなかったり
長ったらしく書いてあって、解読するのがめんどくさくなったので
命令文はjsなんだから、jsで書いてしまえばいいじゃない。

ということで
grunt-watchで 更新されたファイルを監視して、
そのファイルを対象に、CSSとJSをminifyするっていう gruntファイルでございます。

条件。
minifyするファイルは、originalというディレクトリに入っていて
その上位階層に圧縮したファイルを置くだけ
というもの。


まずはGruntfile.jsから。

module.exports = function(grunt) {
  //グラントタスクの設定
  grunt.initConfig({
	cssmin:{
		min:{
			src:'',
			dest:''
		}
	},
    //watchの設定
    watch: {
      options: {
            nospawn: true
          },
      css: {
        files: ["webroot/css/original/*.css"],
        tasks :['cssmin']
      },
      js:{
          files: ["webroot/js/original/*.js"],
        tasks :['uglify']
      }
    },
    uglify:{
    	jsmin:{
    		files:{}
    	}
    }
  });

  grunt.event.on('watch',function(action, filepath,target){

	  //変更のあったファイルのみ変換するようにここで設定内容を変換する
	  if(target == "css"){
		  var cssConf = grunt.config(['cssmin']);
		  var min_path = filepath.replace(/original\//g , "" );

		  cssConf['min']['src'] = filepath;
		  cssConf['min']['dest'] = min_path;
		  grunt.config(['cssmin'], cssConf);

	  }else if(target == "js"){
	  	var jsConf = grunt.config(['uglify']);
		  var min_path = filepath.replace(/original\//g , "" );
		  jsConf['min']['files'] = {};
		  jsConf['min']['files'][min_path] = filepath;
		  grunt.config(['uglify'], jsConf);
//		  grunt.log.error(JSON.stringify(grunt.config.get(['uglify'])));
	  }
  });

  //プラグインの読み込み
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-contrib-uglify');

  //引数未指定時に実行するタスク名の指定。配列なので、複数指定可能
  grunt.registerTask('default',['watch']);
};

それぞれのプラグインについての設定については
ぐぐればすぐ出てくると思うので省略。

今回の注目点は、
grunt.event.on で watchを監視してるところ。
キックされたら、ここをまず通ります。

更新されたファイルがわかるので、
設定値に当てはめてあげて
キックされるようにするっていう感じ。

ここにたどり着くまでに、きょう半日ちょっとかかってしまったのです。

今まで YUIでやってたので、
こっちでやると、圧縮が若干違う。。。
ゆえに、ファイルが更新されたことになってしまって
gitで毎回checkoutするのがめんどくさいとか
ファイル数が多いから 前部圧縮を毎回走らせてるとめっちゃ時間かかるとか
そういう理由で頑張った。

他にも方法があるようであれば、知りたい。。。
なかなか奥が深いけど、解決するから楽しい(n*´ω`*n)

ubuntuのサーバ日付の変更方法

AWS で ubuntuを借りているんだけど、こいつのタイムゾーンの変更方法が
検索する所はほとんど

/usr/share/zoneinfo/Japanを、/etc/localtimeへ上書きコピーするだけです。OS再起動も不要です。

AWSのAmazon Linuxでタイムゾーンを日本時間にする | 株式会社まちいろ


ッて感じだから 適当にそれ信じてたんだけど
相手はubuntuさんだった

上記の方法だと、
apt-getのupdate で 変更されちゃうんだって。


sudo timedatectl set-timezone Asia/Tokyo

でやると、変更されないらしいのでこれやるよろし

ッて感じらしいよ@AWSサポート

あ、ちなみに 再起動しないと cron の 時間設定が反映されなかったので
(上書きコピーしただけかもだけど)
先どうして、cron が 意図した時間に動いているかを確認した方がいいと思うよ

参考サイト:
www.server-world.info

git flow release で ブランチ名間違えた!

どうも。また久しぶりの投稿です。

さて今回は 会社で使ってる git flow について。

git flow 使ってて
ブランチ名間違えてしまって、新たに作りなおしてしまおうと、
開発ブランチならできるんですが、
今回はリリースブランチ。。。

作りなおそうとしたら、

There is an existing release branch (ブランチ名). Finish that one first.

って言われて 怒られました。

さて、どうしたもんでしょう。。。

答え

git branch -m 新しいブランチ名

ブランチ名の改名で問題解決です。


git flow release start testReleaseBranche

あ、間違えた.

本当は releaseBranch だ。

checkout で develop などに 移動しない時には

git branch -m release/releaseBranch

すでに、checkout で 別のブランチになっている場合は

git branch -m release/testReleaseBranche release/releaseBranch

これで、 finish するときは

git flow release finish releaseBranch

これで finish できます。



検索キーワード: release 中止 中断 辞める 削除

こんな感じで、救われる人が増えることを祈る。。

ログインできないユーザにログインする

昨日聞いて、ほへー!って思ったこと。

詳細はこちらを見て欲しいのですが
kazmax.zpp.jp

すごい。

# su -s /bin/bash - apache ← 「-」付きでsu。(現在の環境変数を解除してそのユーザーでログイン)

これでできちまうんだそうだ。
知らなかったのでメモメモw

Zend Mail で 複数ファイルの添付

どこにも記載が無かったので
確かめたら出来たから、メモ。


ZendMailを使って添付ファイルを送信する方法については
ファイルの添付 - Zend_Mail - Zend Framework


上の、適宜バージョンを確認してもらえたらと思いますが、

    $mail = new Zend_Mail();
    // メッセージを作成します...
    $mail->createAttachment($someBinaryString);
    $mail->createAttachment($myImage,
                            'image/gif',
                            Zend_Mime::DISPOSITION_INLINE,
                            Zend_Mime::ENCODING_BASE64);

この感じだと、一つのファイルしか添付できないんじゃないかと不安になっておりました。。。

が。

    $mail = new Zend_Mail();
     
    $at = $mail->createAttachment($myImage);
    $at->type        = 'image/gif';
    $at->disposition = Zend_Mime::DISPOSITION_INLINE;
    $at->encoding    = Zend_Mime::ENCODING_BASE64;
    $at->filename    = 'test.gif';
     
    $mail->send();

と書かれている部分をこうやって・・・

foreach($files as $file){
    $at = $mail->createAttachment($file["myImage"]);
    $at->filename    = $file["fileName"];//'test.gif'
}


こんな感じで添付したい分だけ実行することで、
その分のファイルが添付できた。
ヽ(=´▽`=)ノわーい

PHPから起動したjava内で日本語ファイル名が文字化けする

ちょっとハマったのでメモ。


ubuntu環境でPHPからJavaを呼んで、バッチ的な処理をさせるとき。
Javaから日本語のファイル名が取得できなくて困った。。

Java 再帰的にファイルを検索


これを使って、ファイル名を正規表現でマッチするものだけを処理するって処理だったのに
何故かできない。

原因:PHPからshell_exec()する時に、明示的に
export LANG=hogehoge
してあげないと、正しい値を取得できない。

今回、プログラムはすべてUTFで作っていたので、
export LANG="ja_JP.UTF-8"
を入れていたのですが、どうにもうまく取得できず。
日本語部分が文字化けする。

なんでー?なんでー?といろんな人を巻き込んで
悩んだこと丸一日。。。

結果、サーバの設定的に
en_US.UTF-8 だったから、
export LANG="en_US.UTF-8"
としてあげないと、正しく取得できなかったと。

そういうわけでした。

正常に動いているPHPから
php -r "echo shell_exec('echo $LANG');"

とか


とかの結果で出てきた値でやると
今どの文字コードで動いているのかがわかるので
これを明示的に与えてあげると、うまく動作する
ってことだったらしいです。

echoしたら結果が出てくるんだから、
それで動いてくれればいいのにね。
ひどいわー。 私の一日を返してほしい。

お手伝いしてくれたふぐさん、ありがとうございましたですm(_ _)m