【mac】homebrewでnode.jsをバージョン指定してインストール

一般的にはnvmとかnodebrewとか使うのが普通なのだろうとは思う。
今回はあんまり意味ないけど、homebrewで複数バージョンインストールしてそれぞれ使えるようにした。

nodeのバージョン6と8をインストール

$ brew install node@6
$ brew install node@8

.bash_profile

・・・
export PATH="/usr/local/opt/node@6/bin:$PATH"
# export PATH="/usr/local/opt/node@8/bin:$PATH"                                                                                                                                                                    
・・・                                                                                                                                                                                                             

インストールしたら.bash_profileで都度切り替える。
アナログだけど。。以上です

【rails】check_boxでchecked_valueとunchecked_valueをセット

フォームヘルパーを使う上でかなり基本的な使い方かとは思うけどハマったのでメモしておく。

check_box :user, :is_magazine, :checked => @user.is_magazine, :checked_value => true, :unchecked_value => false
// -> <input type="checkbox" name="user[is_magazine]" value="true" />

未チェックの場合でも簡単にデータ送信できるのはいいですね。以上です。

ionic(cordova)にてpush通知受信でフォアグラウンド・バックグラウンドを判定する

https://github.com/phonegap/phonegap-plugin-push/
こちらのプラグインを使ってプッシュ通知を実装した。で、今回やりたかったことはアプリがフォアグラウンドの場合とバックグラウンドの場合で受信した時の処理を切り分けたいということだった。ドキュメント見ててもやり方がみつからず、強引に対応した。今回はionicで試したのでそのときの対応をメモしておく。

angular.module('starter', ['ionic'])
.run(function($ionicPlatform) {

  var time = (new Date()).getTime() / 1000;

  $ionicPlatform.ready(function() {
    ・・・
    var push = PushNotification.init({
      "ios": {"alert": "true", "badge": "true", "sound": "true"}
    });
    push.on('notification', function(data) {
      var now = (new Date()).getTime() / 1000;
      var diff = now - time;
      if (diff < 1) {
        // バックグラウンドから通知をタップしてアプリ起動された場合
      } else {
        // プッシュ通知を受けた時にアプリがフォアグラウンドの場合
      }
    });
  });

  document.addEventListener('resume', function(event) {
    time = (new Date()).getTime() / 1000;
  });
});                                                                                                                                                                                                                

だいぶ強引だけど。。

【cordova】clipboardコピーのプラグインがiOS11で動かなかったときの対応

https://github.com/VersoSolutions/CordovaClipboard
こちらのプラグインを使っていたのだが、iOS11でコピーできなくなっていた。

https://github.com/VersoSolutions/CordovaClipboard/pull/35/files
メンテされていないだけだと思うけど、こちらのPRのとおりに修正したらできた。

以上です。

Android Studioにてアプリのメモリ使用量を調べる

cordova(ionic)で開発したアプリでフリーズする現象を調査したときのメモ。

1. 画面下の「Android Monitor」を開く
f:id:yoppy0066:20180113215518p:plain

2. 「Monitors」を開く
f:id:yoppy0066:20180113215530p:plain

3. 調査したい端末を選択
f:id:yoppy0066:20180113215544p:plain

4. アプリをビルドしてインストールしてアプリを選択
f:id:yoppy0066:20180113215556p:plain

以上です

【Rails】update where in について

最初こうやってたけど、updateが複数回実行される形だったので非効率だった。

ids = [1, 2, 3]
values = Array.new(ids.size, {status: false})
User.update(ids, values)

# => update users set status = 0 where id = 1
# => update users set status = 0 where id = 2
# => update users set status = 0 where id = 3

こうすれば良いらしい。

ids = [1, 2, 3]
User.where('id in (?)', ids).update_all(status: false)

# => update users set status = 0 where id in (1, 2, 3)

inの場合、プレースホルダを括弧で囲まないとSQLのエラーになって少しハマった。以上です

2017年まとめ

仕事

今年は自分なりに大変な1年だったなぁと思いました。
仕事としては以下がメインだった。
ECサイトの改修案件 Web(php
・辞書アプリの開発 iOS(Swift)
・情報系アプリの開発 ハイブリッド iOSAndroid(ionic)
・マッチングアプリの開発 ハイブリッド iOS(ionic)
・Web APIの改修 (Rails

年始の目標としては、RailsとGoでの開発とテストコードを書くというのが目標だったのであまり達成できなかった。Railsは改修案件だけど少し携われた。テストコードは相変わらず余裕なくて書けてない。。

割と大きめの案件でハイブリッドでのアプリ開発を採用できたのはけっこう大きかったと思う。まだまだネイティブの案件が多いと思うけどHTMLアプリで十分やりたいことはやれる印象で、工数的にはかなり短縮されるのと、デザイン(コーディング)をデザイナーと分業できるのはかなりメリットだった。

その他

自宅で作業することも多いのだが子供が大きくなってくると邪魔してくるので、うちの狭さでは厳しくなってきた。子どもの成長は嬉しいけどどうしたもんか。。

来年の目標は後で書く。