Androidのメモとか

ポキオの日記です。今日も遅延してない。

テレワークことはじめ

出勤とは何だったのか。

ポキオ テレワーク 時差出勤

tl;dr

ピンチはチャンスって言いますよね。

時差出勤・テレワーク

新型コロナウイルスの影響で時差出勤とかテレワークを初めてみました。いままで家で仕事なんてしたことなかったんですが、やってみると色々と気づきがありますねぇ。

残念だったこと

まずはネガティブな面から。

時差出勤しても大して電車が空いてない

そりゃ、みんな時差出勤してますからね。正直あまり意味が無さそうな雰囲気。

会社の環境を完全にエミュレートすることはできない

「話せば済むこと」が済まなくなるのは確かにそう。一方で、そういうコミュニケーションの問題はSlackなどのツールが整ってきたので大丈夫そうです。ただ、どうしても会社から持ち出せない機材があったり、少なからずや会社でしかできないことはありそうなので、そこは出勤せざるを得ない感じですね。

あと、会社で整えた開発環境は偉大だったんだなと実感。家でも同じ環境を構築できればいいんですが、勿論コストがかかるのも事実。

マウスは買ったんですけどね、やっぱり大きいディスプレイといい椅子がほしいなぁ。

テレワークすると運動不足になる

出勤すると、なんだかんだ毎日10000歩以上歩いてたんですが、テレワークをするとその半分以下になってしまいます。もちろん歩数だけが重要なわけではないですが、明らかに動いてないです。

この投稿をInstagramで見る

サンタ、さっき来た。 #ringfitadventure

pokio(@pokiiiiio)がシェアした投稿 -

リングフィット アドベンチャー -Switch

リングフィット アドベンチャー -Switch

  • 発売日: 2019/10/18
  • メディア: Video Game

そういうときは、リングフィットアドベンチャーですねぇ。

誘惑多すぎ

家にいると、ついついコーヒー淹れて飲みがち。

良かったこと

ちゃんとした生活ができた

朝ゆっくりと朝食をとって、ラップトップを開いて業務開始。業務終了後も、すぐに夕食の準備をして、家族と食べる。すごい最高。

邪魔をされずに仕事ができる

もちろん人間なので、会社にいたら同僚と井戸端会議したりしますよね、そりゃ。でも、そういうイベントがなくなって(一部Slackに引っ越し)仕事に集中できる時間が増えたような。

ポキオ テレワーク 時差出勤

このまえお迎えしたSonosでJazzyな曲を聞きながら仕事をできるのもいいですねー。

寝っ転がって仕事ができる

事務作業とかは寝っ転がってやりたいだけです(笑)会社じゃできないし…(笑)

地元のランチが楽しめる(勿論自炊も可)

馴染みのバーとかのランチの営業に行けたりして楽しい。毎日行ったら破産するので、自炊もしていきたいけど(笑)

家の近くにカレー屋さんが沢山あるので、そのあたりも制覇したい所存(笑)

家事に参加できるから結果的に嫁の負担が減る

これが一番大きいかもしれない。この国難が過ぎ去っても、テレワークを続けたいなぁ。

無駄にNode-RED向けノードを作っています

なければ作ればいい。

ポキオ Node-RED

いろいろ作ってます

ローコードでプログラミングができるNode-RED。大好きな上に、いろいろとお世話になってます。

cloud.google.com

とはいえ、自分が使いたいノードがなかったりするので、ちゃっと作って公開してたりします。最近、むしゃくしゃして色々作ったので共有します。

Sonosノード

世界一シンプルなSonosノード

flows.nodered.org

relativelayout.hatenablog.com

同じネットワーク上にあるSonosで流れている曲情報を取得するだけのシンプルなノードですが、気づいたらめっちゃDLされてて嬉しい限りです。

ただ、長時間使用していると、たまにワークしないことがあるので、今後そのあたりを改善できないか対応しようと思います。

Google Playレビュー取得ノード

Androidアプリを作って公開している人にとっては、レビューとか気になると思うんですが、そのレビューを簡単に取得できるノードを作りました。

flows.nodered.org

新しいレビューを拾ってはSlackに投げたり、LINEでこっそり受信したり、使い方は無限大です。

Raspberry Piのシャットダウンや再起動をするノード

そのままですが。

flows.nodered.org

ありそうでなかったノード。Raspberry Pi限定ですが、定期的にRebootしたいようなガチユーザーはぜひ(笑)

【宣伝】Sonosスピーカーで聞いている曲の情報をLEDマトリクスに表示してみる

ジャケ写表示!

ポキオ Sonos Twitter Node-RED

まずはこちらを御覧ください

こういうことです。

先日、誰でも簡単に使えるNode−RED向けSonosノードを作ったので、これをなんとか活用できないかと考えていたわけです。

relativelayout.hatenablog.com

で、作り方は?

去年作成した「かぶれる京急」の資産を活用します。

relativelayout.hatenablog.com

詳しい作り方なんですが・・・

なんと・・・

詳しくは技術書典8で!

techbookfest.org

Day2か40でお待ちしております!Day2か40ですよ!大切なことなので2回言いましたよ!

その他光り物ネタ満載の本となっております!ぜひぜひお立ち寄りくださいませ!

Node−REDで「Sonos x Twitter」連携をやってみた

最強とは。

ポキオ Sonos Twitter Node-RED

前回はNode-RED向けSonos用ノードを作りました

「さいきょう」とか言ってると、結構胡散臭いですよね。分かってます。

relativelayout.hatenablog.com

flows.nodered.org

地味に御ダウンロード頂いており、大変恐縮です。Sonosデバイスを持ってて、まだ使ったことがない人がいたらぜひ使ってくださいね。

Sonos連携は簡単になったけど

作成したSonosノードは設定不要で使えるので、たとえば聞いている楽曲情報をTwitterで共有したいときは、SonosノードとTwitterノードをつなぐだけ(Twitterで投稿したい文面を変化させたいときは、別途ノードが必要)ですが、色々と問題があります。

  • 気づいたらTwitterのライムラインが聞いた曲で埋め尽くされてる
  • 曲をスキップした分だけTweetされてしまう
  • Spotifyの無料プランで流れる広告も曲としてTweetされてしまう

Sonos x Twitter連携のフローとは

このあたりをまるっとサクッと解決したのがこのフローです。

ポキオ Sonos Twitter Node-RED

ポイントは以下の通り。

  • 年のために、Sonosデバイスの監視を行っているRaspberry Piを定期的に再起動
  • Functionノードで、以下のように広告を弾きながらTweet分を作成する
if('advertisement' === msg.payload.title.toLowerCase()){
    return;
}

if('spotify' === msg.payload.artist.toLowerCase()){
    return;
}

var message = 'ポキオさんは' + msg.payload.artist + 'の「' + msg.payload.title + '」を聞いています。';


msg.payload = message;
return msg;
  • 2つのDelayノードを連結する
  • 1つ目のDelayノードで、短時間に曲送りされても無視するために、15分に1回しか次のノードに情報を渡さないようにする
  • 2つ目のDelayノードで、1日10回までTweetされないように制限をする

こんな感じ。これによって、なんとなく聞いている音楽をシェアしつつ、あまりタイムラインを汚さないような紳士的な振る舞いをするフローが爆誕したわけです!

そこまでして聞いてる音楽をシェアしてなんのためになるのか?

そういうことはあまり考えないようにしています(笑)

ぼくがかんがえたさいきょうのNode-RED向けSonosノード

さいきょうにして、かんたん。

ポキオ Sonos Node-RED

tl;dr

flows.nodered.org

Sonos用の超絶シンプルなNode-RED向けノードを作ったので、みんな使ってね!

Sonosノードは数あれど

どのノードも多機能過ぎたり、メンテされてなかったり、色々あって。

もうこんな状況なら、自分で作ってしまえ!と思って、作ってみました。

使い方はかんたん

node-red-contrib-sonos-notifyというノードをインストール。

ポキオ Sonos Node-RED

フローに配置するだけ。以上。

ポキオ Sonos Node-RED

ノードが同じネットワーク上のSonosデバイスを発見し、曲情報を次のノードに渡してくれます。曲が変われば、そのタイミングで更に通知されます。

ポキオ Sonos Node-RED

もちろん特定のSonosデバイスを指定することも可能。

ね、簡単でしょ。

良いSonosライフを!

ハックしまくってクオリティ・オブ・ライフをエンハンスしていきたいですね!

Sonos One ボイスコントロール対応 スマートスピーカー Amazon Alexa搭載 ブラック

Sonos One ボイスコントロール対応 スマートスピーカー Amazon Alexa搭載 ブラック

  • 出版社/メーカー: Sonos
  • 発売日: 2018/10/01
  • メディア: エレクトロニクス

技術書典に向けてGoogle Drive上のファイル監視をGASからやってみる(後編)

なお、まだ執筆着手してない。

ポキオ Google Drive Google Apps Script enebular Node-RED Slack

自分を追い込むツール

どういうことかというと・・・

relativelayout.hatenablog.com

前回は、GASから技術書典向け原稿を格納してあるGoogle Driveの情報をGASから取得してみました。ただ、本当にやりたいことは「他の人がいかに進捗を出しているか通知することで、自分のモチベーションを向上させる」ことであるわけです。

そこで今回は、

  • 技術書典向け原稿が格納してあるGoogle Drive上のあるフォルダの情報をGASから取得できるようにする
  • それをこっそりWebAPIとして叩けるようにする
  • 定期的にenebular(Node-RED)からそのAPIを叩く
  • 誰かが進捗を出したときに、Slackに通知して自分を鼓舞する

みたいな仕組みを作ってみました。

まずはGAS側の実装

前回のように、DriveAppクラスDriveクラスの両方を使っていきます。

  • DriveAppクラスで特定のフォルダ内のファイルのリストを取得しそれぞれのIDを割り出す
  • DriveクラスでIDを使って「最終更新日」などの情報を取得
  • それらのデータをJSONに整形しWebAPIからGETできるようにする

こんな感じでセキュリティホール情報を取得できる術を作ってあげます。実際の実装はこんな感じ。

function doGet(e){
  return ContentService.createTextOutput(JSON.stringify(getFileList()))
}

function getFileList() {
  var id = 'xxxxx'
  var data = {}
  data.fileList = []
  
  var files = DriveApp.getFolderById(id).getFiles()
  while(files.hasNext()) {
    var file = files.next();
    var fileDetail = Drive.Files.get(file.getId())
    
    var fileInfo = {}
    fileInfo.name = file.getName()
    fileInfo.user = fileDetail.lastModifyingUserName
    fileInfo.date = fileDetail.modifiedDate
    
    data.fileList.push(fileInfo)
  }
  
  Logger.log(JSON.stringify(data))
  return data
}

そして、これをGASのメニューの「ウェブアプリケーションとして導入...」からWebAPI化します。GET時にはdoGet()が呼ばれ、JSONがレスポンスとして返るようになります。

次にenebular側の実装

フローはこんな感じです。

ポキオ Google Drive Google Apps Script enebular Node-RED Slack

  • 先程ののWebAPIを定期的に叩く
  • 最終更新日のタイムスタンプから最近更新されたファイルがあるかないかを判断
  • ある場合は特定のSlackに対してWebhookを投げて通知を行う

Functionノードでは、一応タイムスタンプを見ています。

var message = '';
var criteriaDate = new Date(Date.now() - 1 * 60 * 60 * 1000);

msg.payload.fileList.forEach(file => {
    if(criteriaDate < Date.parse(file.date)){
        message += file.user + 'さんが頑張っています!\n'
    }
});

msg.payload = message;
return msg;

大したことをしていないですが、ここでは1時間以内に更新されたファイルが有るかないかを検知しています。あった場合は、ここで生成されたmessageをSlackに投稿します。

動かしてみた

こんな感じで通知されます。

ポキオ Google Drive Google Apps Script enebular Node-RED Slack

ふふふ・・・みんな頑張ってますね・・・ふふふ・・・。

そろそろ僕も頑張って執筆します・・・。

Node.jsからSonosの状態を取得してみる

ヌー民。

ポキオ Sonos Node.js

Sonosで聞いてる曲をシェアしたい

そう思ったわけです。

relativelayout.hatenablog.com

Sonosのスピーカーで曲を聞いたことをTriggerにIFTTTを動かしたかったりしたんですが、残念ながらSonosはTriggerを提供しておらず、すべてActionとなっていました。そこで、今回はNode.jsの便利なパッケージを使って、Sonosで聞いた曲を取得してみようと思います。

その名もnode-sonos

そのままですね。

github.com

これがすごい便利。とりあえず、

npm i sonos

とかでインストールしてやって。ひとまず同じネットワーク内の機器探索から。

const Sonos = require('sonos')

Sonos.DeviceDiscovery((device) => {
    console.log('--------- device found ----------')
    console.log(device)
})

こんな感じで機器探索の機能が準備されています。これを実行すると・・・。

--------- device found ----------
Sonos {
  host: '192.168.1.35',
  port: 1400,
  options: 
   { endpoints: 
      { transport: '/MediaRenderer/AVTransport/Control',
        rendering: '/MediaRenderer/RenderingControl/Control',
        device: '/DeviceProperties/Control' },
     spotify: { region: '3079' } },
  _events: { newListener: [AsyncFunction: implicitListen] },
  _eventsCount: 1 }

ここで取得できたIPアドレスとポート番号を使って、聞いている音楽の情報を取得してみます。

const Sonos = require('sonos')
const device = new Sonos.Sonos('192.168.1.35', '1400')

device.on('CurrentTrack', (track) => {
    console.log('--------- now playing... ---------')
    console.log(track)
})

すると、スクリプト実行時と曲が変わるタイミングで、情報が取得できます。

--------- now playing... ---------
{ id: null,
  parentID: null,
  title: 'McDonald Romance',
  artist: 'King Gnu',
  album: 'McDonald Romance',
  albumArtURI: 'https://i.scdn.co/image/xxxxxxxxxx',
  uri: 'x-sonos-spotify:spotify:track:xxxxxxxxxx',
  duration: 165,
  queuePosition: 1 }

たまに2回同じ曲名のイベントが発火してる気がしますが、そこはなんとかよしなに処理してあげましょう。

Sonos One ボイスコントロール対応 スマートスピーカー Amazon Alexa搭載 ブラック

Sonos One ボイスコントロール対応 スマートスピーカー Amazon Alexa搭載 ブラック

  • 出版社/メーカー: Sonos
  • 発売日: 2018/10/01
  • メディア: エレクトロニクス

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。