アラのアラアラしい日記

こっそりかいてます

Swiftでコマンドラインツールを書きました

こんばんわ
ビーサン出社する勇気が出ない人です。
つまらない大人になってしまいました。

コマンドラインツールを仕事中に作ったので報告です。
この記事が上司にばれませんように。

github.com

どうでもいいですが私はエディタにはお金出したことないgithub課金勢です。
説明は全てREADMEに記載しているので使い方の細かい説明は省略しますが、
第一引数にワード、第二引数に絵文字や記号を入れると、第二引数に飾られた第一引数が出力されます。
言葉の意味をもっと簡単に表現したい(大袈裟にしたい)と思い作りました。
“エモい"という言葉から名前を付けています。

「それいいね!」ではなく「☆☆☆☆☆☆☆ それいいね ☆☆☆☆☆☆☆」の方がすごく共感してそうだしちょっと面白いかなと思っています。
メルマガ等にたまにあるような装飾にも使えるかなと作りながら思っていたのでメルマガ書く人はぜひ使ってください。

iOSアプリを出しました

こんばんわ。
お盆休みを全てファミレスで過ごした人です。

数ヶ月前ですがアプリをリリースしたので報告です。
他にやりたいことが多すぎてすっかり紹介記事を書くのを忘れていました。

SDT

SDT

  • Wakana Ara
  • ライフスタイル
  • 無料

翌日のゴミが何かを教えるリマインドアプリです。
ユーザは曜日ごとに好きなゴミの種類を登録することが出来、毎日20時に通知が届きます。
この通知はローカル通知ですので電波のないところでも受け取ることができます。

数時間で書きましたが数時間でリジェクトされました笑
理由はリマインドのみの機能だとアプリのリリース規定を破ることになるので、機能を増やすようにとのことでした。
そこから1時間で都内数区のゴミ出し表を表示する機能を追加したらレビューが通ったので良かったです。

私自身これを作りたくて始めたわけではなく、なんでもいいから何か自分の作品を持っておきたかったというのが大きな理由で、first commitのようなアプリではありますが、なんとなくダウンロードしてくれたらグラフをみてぬか喜びしてると思います。
現在はこれの他に自分の作りたいものを作っているのでそちらが完成してレビューが通ればまたブログに書きたいと思います。

しかしゴミアプリの方も少しずつ更新していきたいとは思っているので、もっとこうして欲しい等のご意見があればぜひお願いします。
(自分でもある程度の改善点は認識してますが笑)

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とかを使っている場合はまた実装方法が変わってくると思いますが、困ったらお試しください。