アラのアラアラしい日記

こっそりかいてます

git grepをもっと見やすくする

こんにちは。注射の針が刺さってるのが見れない人です。
grepはむちゃくちゃよく使うコマンドのひとつだと思いますが、今日はそれをもっと見やすく色つけようっていうエントリです。

grepのコマンド自体には元々GREP_OPTIONS='--color=auto'などのオプションが用意されているのは知っていましたが、私はgit grepを多用するので今日はその色分け設定をメモしておきます。
(git grepの方がgitがインデックスを持っているので地味に処理が早いみたいです)

git grepの色の設定はgit configで行うことが出来ます。.gitconfigの中に入れてしまってもいいですね。

Git - git-config Documentation
こちらがgit configのドキュメントですが、想像以上にオプションがありました。なんかもったいない笑

色の設定はこちらにあります。
https://git-scm.com/docs/git-config#git-config-colorgrepltslotgt

<slot>部分にどのパートの色なのかを指定し、値に実際の色を代入する感じです。

.gitconfigでは以下のように書きます。

[color "grep"]
match = cyan
linenumber = bold white
filename = yellow

結果はこのようになります。
f:id:wknar0311:20170310170053p:plain
とても見やすくなりました。
git grepを使う方はぜひ試してみてください。

raspiで防犯カメラをつくった

こんばんわ!年始早々に鍵をなくした人です。
なかなか見つからないので、raspiで防犯カメラつくりました。

登場人物

  • ジャンプワイヤ(10本220円)
  • 焦電型赤外線センサモジュール(600円)
  • ウェブカメラ(1280円)

お手軽な値段ですね!
GPIOへの繋ぎ方等は色々なサイトに載っている&&raspiのモデルによって多少違うので割愛。

こんな感じになります。なかなか可愛い。。
f:id:wknar0311:20170225234244j:plain

撮影には、fswebcamを使用します。

www.raspberrypi.org
raspi公式にも丁寧に書いてあります。

fswebcam のインストール

$ sudo apt-get install fswebcam

静止画を撮影する(下部に撮影時刻が印字される)

fswebcam $(date +"%Y-%m-%d_%H%M").jpg

静止画を撮影する(撮影時刻を印字しない)

fswebcam --no-banner $(date +"%Y-%m-%d_%H%M").jpg

こんな感じでウェブカメラで写真を撮影することが出来ます。
正直そこまで画質はよくありません笑
あとはこの写真が撮影されたのをトリガとしてどう自分に伝えるかですが、今のところhomebridgeとかを検討中です。

今のところ悪い人は入ってきてないのでただの私の生活記録になっててちょっと気まずいです。

iOS10でSwift3のpush通知設定(UNUserNotificationCenterを使う)

こんばんわ!断捨離が好きな人です。
iOS10からUser Notifications Frameworkが発表されていて、iOS9まで使っていたUIUserNotificationSettingsがdeprecatedになってしまった訳ですが、今日はその書き方です。要するにわたしのメモです。

AppDelegate.swift内で以下のように書きます。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler:{ (g, e) in
        if (e != nil) {
            print("err with notification auth: ", e.debugDescription)
            return
        }
        if (g) {
            UIApplication.shared.registerForRemoteNotifications()
        }
    })
    return true
}

今までは通知の許可設定を変数に入れてからそれを使ってregisterUserNotificationSettingsを呼び出すようにしていたものを、リクエストを送るインスタンスメソッド内でコールバックをハンドリング出来るようになったので安定感が増しました気がします。
簡単でしょ?そう、アイフォーンならね。

ラズパイのディレクトリをmacのfinderから見れるようにしよう

こんにちは!家に電子レンジがない人です。
久しぶりに書きます。

今回はラズパイのディレクトリにmacのfinderからアクセスする方法です。
windowsだとsambaが便利のようですが、macはnettalkというライブラリをインストールすると30秒で完了します。

raspiにnettalkのインストール

$ sudo apt-get install netatalk

raspi再起動

$ sudo reboot

macのfinderから[Go] -> [Connect To Server]
f:id:wknar0311:20170216152729p:plain
afp://pi(username)@raspberrypi.localを入力 -> pi(username)のパスワード入力

piのホームディレクトリ内が見れるようになります。
超簡単なのでやってみてね!

TabLayoutのタブを無効化する方法

こんにちは!腹筋ローラーする人です。
昼は会社で2週間ごとにiOS, android開発を交互にして、夜は家でruby触る生活を1ヶ月続けたらメンヘラになりました。弱めです。
個人的に書いてて楽しいのはrubyですが、型がないと不安になるようになりました。

今回はandroid開発でTabLayoutの操作で地味にハマったのでメモ。

tabs.addTab(tabs.newTab().setText("TAB0"));
tabs.addTab(tabs.newTab().setText("TAB1"));
tabs.addTab(tabs.newTab().setText("TAB2"));

例えばこのようにタブを追加している場合で、
ページロード中などのタブ変更をユーザにさせたくない時にタブのタッチを無効化にしたい場合、

tabs.setEnabled(false);

このようにしてまるっと全てのタブを無効化できると思っていたのですがこれうまくいかないんです。

むっちゃググりながら情報拾い集めてたどり着いた結果がこちら。TabLayoutの無効化の場合は、

for ( int i = 0; i < tabs.getChildCount(); i++ ) {
    ((LinearLayout)tabs.getChildAt(0)).getChildAt(i).setEnabled(false);
}

こんな感じで、一度レイアウトでタブを拾ってから一つずつsetEnableしてあげないとダメみたいですね。
有効化するときはもちろんtrueで大丈夫です。

FragmentTabHostとかを使っている場合はまた実装方法が変わってくると思いますが、困ったらお試しください。

homebrewの最新バージョンでscreenがinstall出来なくなった時の対処法

こんばんわ!!
2日かけてバグと戦うような情弱エンジニアです。精進が必要です。

homebrewを新しくインストールし直したら、brew searchしてもscreenが検索結果に出なくなりました。
今日はその対処法です。
utf-8パッチ付きのものをインストールすると、出なくなっていた絵文字等も表示されるようになります。
まずはtapします。

brew tap rcmdnk/homebrew-rcmdnkpac

続いてインストールです。

brew install screenutf8 --utf8

これでscreenが無事にインストールされるはずです。
また、ターミナルを再起動すると所々おかしかった動作も正常に動作するようになると思います。
誤作動がある方は是非お試しください〜

AVFoundationを使ったビデオの処理で「Cannot Complete Export」エラーが出た(iOS9.2~)

こんばんわ!
平日の睡眠不足から、休日に22時間ぶっ通しで寝てしまったところ一時的に精神状態が鬱になった人です。
睡眠の取り過ぎも良くないようですね。

今日はiOS9.2になってからぶつかったバグについてのログです。
Apple先輩徐々に色々厳しくなってますね。

AVFoundationを使ったビデオのexportは映像と音声を分けて定義するのですが、
OSをiOS9.2にしてから今まで成功していたexportで以下のようなエラーが発生しました。

AVAssetExportSession Error -11820 Cannot Complete Export

エラー内容の通り、exportが出来なくなっていたんです。
調査してみると以下のコードに問題があることが分かりました。

AVMutableComposition* composition = [AVMutableComposition composition];
AVMutableCompositionTrack * composedAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio
                                                                              preferredTrackID:kCMPersistentTrackID_Invalid];
[composedAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, kCMTimeZero)
                                                       ofTrack:[[video0 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
                                                        atTime:kCMTimeZero
                                                            error:nil];

ユーザが音声をミュートに設定していた場合、AVMediaTypeAudioを呼び出していたにも関わらず 音声の再生時間をゼロ秒からゼロ秒に設定していたのが原因でした。

iOS9.2から、定義して使用しないようなコードを書くとexportエラーが起こるようです。
全くおっしゃる通りです!使わないものを定義してどうするんでしょうね!

という訳でミュート設定の場合のみ定義AVMediaTypeAudioの定義をするようにしたら無事にエラーが起こらなくなりました。
非常に初歩的なことですが、こういう細かいところが大切ですしチェックされるようになったのだなと思いました。

綺麗なコードを書いていきたいですね。。
あとバージョンアップ毎に入念なチェックをしなければいけませんね!反省しました!!それでは!!