アラのアラアラしい日記

こっそりかいてます

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の定義をするようにしたら無事にエラーが起こらなくなりました。
非常に初歩的なことですが、こういう細かいところが大切ですしチェックされるようになったのだなと思いました。

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

El capitanでpackageが全体的におかしくなった時の対処法

こんにちは!年収が4万円上がったのでマットレスを変えた人です。
3600円でした。(安)

今日はmacをel capitanにした時にrubyの挙動がおかしかったり、homebrewがinstall出来なくなったりした時の対処メモです。
私はrailsのアップデートをしようとした時に、rubyのあるディレクトリでpermissionエラーが出ていることが分かりました。

今回のアップデートから、/usr/bin以下のディレクトリのpermissionが変わって、ログインユーザで使えるものが限られたようです。
この他にもhomebrew等でパッケージのインストールが出来なくなったり、ライブラリのアップデートが出来なくなっていました。

こんな時は、homebrewを一度アンインストールしてから再度インストールするとパッケージの使用先が全体的に綺麗になります。
アンインストールは以下

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

続いてインストール

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

前のhomebrewでインストールした系は全て消えているので、もう一度インストールし直します。 Rubyの例です。

$ brew install ruby

この時に、前にインストールした時に残っているファイルが存在している為にエラーが出ることがあります。
前回のインストールが必要ない場合はそのまま上書きしてしまいます。

$ brew link --overwrite ruby

こんか感じで完了です。
rails等のエラーが出ていたgemのインストールも、綺麗にインストール出来るようになります。

困っている時はぜひ試してみてください!