brew update で `/usr/local/Library/ENV/scm/git: No such file or directory` エラー

What?

brew cask updateしたら、gitがないエラーが出る。

$ brew cask update
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> /usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
==> Error: update-report should not be called directly!
==> Homebrew has enabled anonymous aggregate user behaviour analytics
Read the analytics documentation (and how to opt-out) here:
  https://git.io/brew-analytics
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/brew.sh: line 32: /usr/local/Library/ENV/scm/git: No such file or directory
Error: update-report should not be called directly!

Why?

github.com

Solution?

  • cd "$(brew --repository)" && git fetch && git reset --hard origin/master してから、もう一度実行する

参考

discuss.circleci.com

stackoverflow.com

Google ドライブで 「現在、ファイルを開くことができません。」

f:id:kz_engineer:20161013180749p:plain

What?

現在、ファイルを開くことができません。

アドレスを確認して、もう一度試してください。
Sorry, unable to open the file at this time.

Please check the address and try again.

会社でGoogle formで作っていたあるツールが突然この表示。検索しても、プラグインを殺せとか、ブラウザ変えろとか、そういうものばっかり。100人一気に見れなくなってるんだからそれはない。

Why?

フォームのオーナーのアカウントが手違いで消されたからだった。このあとアカウントなどなどを復活させました。

じゃあ、そういうエラーメッセージの表示をしてよ!w

自分のアカウントの情報漏洩確認サイト

大きい情報漏洩ニュースがあった時、自分のアカウントが漏洩しているか心配ですよね。

確認用サイト

f:id:kz_engineer:20160726113543p:plain

haveibeenpwned.com

僕の結果

  • 先日のLinkedInはじめ、大手2,3サイトほどの漏洩リストに入ってた。残念だ。
  • 即、パスワード変えました。

なぜRailsでtherubyracerのコメントを外さなきゃいけないのか

Why?

  • Rails 起動のときに、therubyracerのコメントを外せ外せって書いてあるけどなんでかわからん

そもそも therubyracer って何?

therubyracer | RubyGems.org | your community gem host

  • therubyracer: JavaScript のエンジンである v8 を Ruby から使えるようにする gem
    • v8 エンジンがシステム上で利用できる場合はそのエンジンを使う
    • 利用できない場合には libv8 gem から、各環境ごとの v8 エンジンバイナリファイルを取得する
  • v8: V8 JavaScript Engine
  • libv8: 各環境ごとの v8 エンジンバイナリファイルを用意してくれる

なんで Rails に JSランタイムが必要なのか?

  • RailsではcoffeescriptコンパイルやJS圧縮にExecJSというライブラリを使う
    • 例えば、asset pipelineを使わないならいらない
    • ExecJSはそのシステム上で使えるJavascriptランタイムを選んで実行する
    • therubyracer でも node.js でも、使える方を使う

stackoverflow.com

 1. We can write your ruby codes inside js codes. 
 2. We can invoke the js functions from ruby codes.  
 3. Manipulation of javscript objects & the passing them to javascript functions.

ごめん、答え見つけた

stackoverflow.com

Q.なぜデフォルトでコメントアウトされてるの?

A.それは他のJSランタイム(Node.jsとか)があるなら、必要がないからだよ!そもそもJSいらないなら、Railsの設定でExecJSライブラリを使わないという選択も可能だよ!

TODO

  • ExecJSライブラリを使わない場合、どれくらい不便なのか。
  • therubyracerの役割が今ひとつわかってない
  • Node.jsがある場合、どうやって動かす?

参考

d.hatena.ne.jp

AWS Lambda で画像のサムネイルを作る

What for?

  • 基本の素振りはできたので、少しは役に立つものを作る
  • S3にアップロードされた画像のサムネイルをつくる

Prepare

var im = require('imagemagick');

im.readMetadata('hoge.jpg', function(err, metadata){
      if (err) throw err;
        console.log('Shot at '+metadata.exif.dateTimeOriginal);
})
  • convertでのリサイズ
    • S3のデータにどうやってconvertかけよう?
      • バイナリデータ拾ってきて流し込みたいな
var im = require('imagemagick');

im.convert(['hoge.jpg', '-resize', '25x120', 'hoge-small.jpg'],
        function(err, stdout){
              if (err) throw err;
                console.log('stdout:', stdout);
        });
var im = require('imagemagick');
var fs = require('fs');

im.resize({
  srcData: fs.readFileSync('hoge.jpg', 'binary'),
  width:   256
}, function(err, stdout, stderr){
  if (err) throw err
  fs.writeFileSync('hoge-resized.jpg', stdout, 'binary');
  console.log('resized kittens.jpg to fit within 256x256px')
});
  • S3のObject取ってくる練習

    • 準備で対象S3にfull accessできるIAM role作っとく
    • 実行するときは、Role指定で実行 $ AWS_PROFILE=rw-s3 node simpleS3.js
  • BacketList取ってくるだけ

var AWS = require('aws-sdk');

s3 = new AWS.S3();

s3.listBuckets(function(err, data) {
  if (err) { console.log("Error:", err); }
  else {
    for (var index in data.Buckets) {
      var bucket = data.Buckets[index];
      console.log("Bucket: ", bucket.Name, ' : ', bucket.CreationDate);
    }
  }
});
  • S3からファイルをローカルに保存
    • readstreamでデータ取ってきて、fsのwritestreamでputする
var AWS = require('aws-sdk');
var fs = require('fs');

var s3 = new AWS.S3();

var params = {Bucket: 'for-lambda-test', Key: 'hoge.jpg'};
var file = fs.createWriteStream('output.jpg');
s3.getObject(params).createReadStream().pipe(file);

Code

  • コードの大きな流れ
    • S3にファイルをput -> Lambda関数が呼ばれる -> eventからS3 objectを取得 -> w100_ のprefixの有無の確認 -> convertする -> 同じバケットにサムネイルを保存する
var AWS = require('aws-sdk');
var fs = require('fs');
var im = require('imagemagick');
var s3 = new AWS.S3();

exports.handler = function (event, context) {
  var bucket = event.Records[0].s3.bucket.name;
  var key    = event.Records[0].s3.object.key;
  var params = {
    Bucket: bucket,
    Key   : key
  };

  console.log(params);
  // For stop infinity loop
  if (key.substr(0,5) === 'w100_') {
    return;
  }

  s3.getObject(params, function (err, data) {
    if (err) {
      context.done('error on get obj', err);
    }
    console.log(data);

    im.resize({
      srcData: data.Body,
      width: 100
    }, function (err, stdout, stderr) {
      if (err) {
        context.done('error on resizing', err);
      }
      s3.putObject({
        Bucket: bucket,
        Key   : 'w100_' + key,
        Body  : new Buffer(stdout, 'binary')
      }, function (err, res) {
        if (err) {
          context.done('error on put obj', err);
        }
        context.done();
      });
    });
  });
};
  • 初回は、 w100_ のprefixの有無の確認 の記述を書き忘れて、無限ループに突入していた
    • ファイルが数百個できて悲惨だった...orz
  // For stop infinity loop
  if (key.substr(0,5) === 'w100_') {
    return;
  }

TODO

  • Node.js のoutputやらエラーハンドリング周りがわかってない
  • Node.js の writeStream やら readStream やらがしっくりきてない
  • 不安だからテスト書きながら進めたいけど、Node.jsのテスト手法やいかに
  • node-imagemagick の最終更新が Jul 24, 2014 なので違う方法のほうが良さそう

Line bot の SSL証明書にLet’s Encrypt と StartSSL CA が追加

Why?

  • みなさん、Let’s Encrypt が使えずに詰んでた

現在

  • 無事追加されたよう。
  • 一旦、Heroku と FIXIE でやってたけど、500アクセス制限に怯えていたので、これで安心して開発できる
[BOT API] Let’s Encrypt and StartSSL CA has been added

2016.04.18
SSL CA root certificates for Let’s Encrypt and StartSSL have been added for BOT API callback URL. See the “Note” in the Registering a callback URL section to find a link to the full list of authorized CAs.

https://developers.line.me/news?ny=2016&nm=04

AWS Lambda で S3 のアップロードログを取る

Why?

  • Lambda の練習用
    • S3 のイベントを拾う
    • ログに書き込む
    • 特に他のサービスと連携しない

Code

  • Handler: logS3.handler
  • Add event source: S3のPutイベントを拾う
  • IAM: Putイベントを拾う対象のReadイベントが必須
console.log('Load Lambda function');
var AWS = require('aws-sdk');

exports.handler = function (event, context) {
  console.log("Received event");
  var bucket = event.Records[0].s3.bucket.name;
  var object = event.Records[0].s3.object.key;
  console.log("bucket name: " + bucket + " / object key: " + object);
  console.log("done");
};

Result

  • Monitor tabでinvoke確認
  • Cloud watch でログを確認
    • ちゃんと出てた
bucket name: for-lambda-test2 / object key: hoge.jpg 

github.com