iwathiの/var/log

生活と仕事の効率化が趣味。

ビットコインの価格をグラフ化→LINEに定期通知する【GAS】

f:id:iwathi3:20171216170101j:plain

ビットコインの価格が気になる

最近、連日世間を騒がせているビットコイン

あの時、買っとけばよかった。

と、思っている人も多いのではないでしょうか。

またビットコイン価格は気になるけど、サラリーマンだから常に見てはいられないし、かといって見ていないと暴落するかも・・・という方も多いかと思います。

そんな方向けにビットコインの価格チャートをLINEに通知する方法を紹介します。

作れるようになるもの

f:id:iwathi3:20171216084616j:plain

こんな感じで現在の価格とチャートがLINE通知されます。

ここではビットコインリップルの両方を表示しているので2つのグラフが表示されます。

好きな通貨の情報を登録すれば通知を変えられるようになっているので自由に変更して使ってください。

使用するサービス

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

やっていること

今回はGoogle Apps Scripts(以下、GAS)を使用して実装しています。

下記の流れでビットコインの価格をグラフ化しLINEに定期通知をします。

  1. CoincheckAPIからビットコイン価格を取得
  2. 取得した価格をGoogle Spreadsheetへ保管
  3. Google Spreadsheetでグラフを作成
  4. 作成したグラフをLINEへ送信

今回は上記を実行するGASのコードを参考として掲載しています

またGoogleSpreadSheetも共有しているのでそちらをコピーして使用することで簡単にグラフ化することもできます。

実装上で必要な情報

今回、GASのコードは掲載していますが、皆さんに埋めていただく必要のある情報が2つあります。

下記でその調べ方を述べていくので、その部分を調べて最後に掲載しているコードに反映させてください。

LINE NotifyAPIの設定とトークンを調べる

この記事を参考にしていただければセットアップまでは完璧だと思います。

[超簡単]LINE notify を使ってみる - Qiita

この記事に出てくるトークン」をコピーしておいてください。

このトークンを使うことでLINEに通知することができます。

Google SpreadSheetの準備

下記の様なグラフを表示するGoogle SpreadSheetを用意していきます。

f:id:iwathi3:20171216105403j:plain

Google SpreadSheetの設置

下記にテンプレートとなるファイルを共有しています。

自分のGoogleドライブ等にコピーして使用してください

(コピー等ができない場合教えてください。。。)

docs.google.com

今回の仕様上、2行目が必要なので初期値は0になっていたりするのでそのへんは適宜直してください。

SpreadSheetのIDを調べる

続いて、Templateから自分のGoogleドライブへコピーしたGoogleSpreadSheetのIDを調べます。


コピーしたGoogle SpreadSheetを開くとSpreadSheetのページへ移動します。

その移動した先のURLにSpreadSheetを特定するためのIDが含まれています。

下記の様なURLになっているはずなので【ここの文字列】をコピーしてください。

https://docs.google.com/spreadsheets/d/【ここの文字列】/edit#gid=0

Google Apps Script 上へコードを設置

上記で取得した情報を下記のコードへ反映させ、ご自身のGoogle Apps Scriptへ置いてください。

設置の仕方はこちらなどを参照ください。

ASCII.jp:Google Apps Scriptのキホンと使い方 (1/4)|Web制作をちょっと便利にするGoogle Apps Script入門

gist1447c2e315e17efc7010ce3f46a5cc5f

一度実行をしてみて、Spreadsheetに情報が追記されることを確認してみてください。

確認ができれば、あとは定期的にこのコードを実行させるだけです。

GASの関数の説明

コーディングがくそなのはご愛嬌でお願いします。

アドバイスを随時募集しております。

getCCAPI(type, sendFlag)

CoincheckAPIから価格情報を取得してSpreadSheetに格納する関数を呼んでいます。

ここで設定しているtypeがcoincheckAPIに問い合わせる内容になるのでAPIに該当するものを設定してください

またSpreadsheetに記録する際、このtypeと同じ名前のシートに記録しますのでシート名も合わせてください。

sendFlagはLINE通知をするかどうかのフラグです。

  • 0の場合: Spreadsheetへのデータ格納のみ行う
  • 1の場合: Spreadsheetへのデータ格納 + LINE通知も行う

sendGraphImage(type, ss)

こちらを参考にさせていただきました。

マネージャーでもできる!Google スプレッドシートのグラフを Slack に定期ポストする手軽な方法 - クラウドワークス エンジニアブログ

引数としてグラフを出力するためのシート名とSpreadsheetのオブジェクトを渡してください。

シート内に複数のグラフをもし作った際には

var chartImage = charts[0].getBlob().getAs('image/png').setName("graph.png");

charts[0]を変更する必要がある、、、ハズです。

setCC2SS(SS, type, value, sendFlag)

Spreadsheetに書き込む関数です。

if(sendFlag == 1){

if(((lastCount + 1) % SENDCOUNTS) == 0){

sendGraphImage(type,SS);

}

}

SENDCOUNTSどのくらいの間隔でLINE通知をするのかの閾値です。

GASを5分間間隔で動かすとすれば、SENDCOUNTS=12にすることで1時間に一回のLINE通知を受け取ることができます。

適宜設定してください。

Coincheck APIのリンク

下記のAPIはパブリックなAPIとなっていて、認証等が必要が無く、アクセスするとレートだけを表示するという簡素な作りなので迷うことは全くありません。

https://coincheck.com/api/rate/btc_jpy

詳しくはこちらのAPIドキュメントを参照ください。

取引所APIドキュメント | Coincheck(コインチェック)

Google Apps Script関連の参考リンク

今回参考にさせていただいたリンクはこちらです。

Google Apps ScriptからLINE NotifyでLINEにメッセージを送る - Qiita

マネージャーでもできる!Google スプレッドシートのグラフを Slack に定期ポストする手軽な方法 - クラウドワークス エンジニアブログ

Google Apps Scriptでグラフを作成する方法の最初の一歩

グラフ|Google Apps Script入門

取引所APIドキュメント | Coincheck(コインチェック)

Google Apps Script 実践メモ(スプレッドシート) - Qiita

まとめ

  • ビットコインの価格をチャート付きで定期的に確認できるようになる
  • GAS経由でSpreadsheetのグラフをLINE通知できるようになる

最後に

 最近のビットコインの価格変動はバブルだと言われ続けています。

 バブルなのかバブルでないのかは将来しか分かりませんが、どちらにしてもそこに至るまでにどういった値動きをしていたのかをリアルタイムで感じるのは今しかできません。

 どの様な結果になるにせよ、歴史の1ページになることは間違いないので、リアルタイムで観察してみてはどうでしょうか。



ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

2万円台のWiFi付きロボット掃除機DEEBOT N79と1週間過ごして

f:id:iwathi3:20171205075051j:plain

ロボット掃除機がやってきた

ついに長年欲しかったロボット掃除機を買いました。

7月に引っ越し、ちょっと部屋が広くなったのもあり、掃除するのが大変だと思ったというのと、単純に欲しかったため、というのが正直なところです。

買ったのはECOVACS社のDEEBOT N79というロボット掃除機です。

特徴

  • 2万円台と価格が安い
  • WiFi付き、スマホ操作対応
  • 外出先から掃除実行・状態確認可能
  • 充電ドックでの自動充電機能
  • 落下防止センサー
  • 定期実行スケジュール機能
  • 交換部品がAmazonで購入可能

2万円台のロボット掃除機でこれだけ機能を揃えてれば十分かと思います。

・・・ちゃんと動けばね!

動作チェック

ここからは基本動作のチェックに移って行きたいと思いますね。

確認したのは基本機能である下記4点です。

  • 落下防止センサー
  • スマホからの操作
  • 充電ドックへの帰還
  • スケジュールの設定

この辺で引っかかってるようだとかなり心配ですが、果たして・・・

落下防止センサー

f:id:iwathi3:20171206060756j:plain

裏面3箇所にLEDの様な物がついています。 おそらくはココが落下防止センサーとなっているのでしょう。

各2つのLEDが1セットでついているので、送信部と受光部での時間とかで地面との距離を測っていると思われます。

動いているところ(6倍速)

www.youtube.com

落下防止センサーがいい感じに作動してますね。

これなら落ちる心配はなさそう。

スマホからの操作

スマホの操作画面はこんな感じです。

f:id:iwathi3:20171206061242j:plain

  • 画面中央部がマニュアル操作用のボタン
  • 画面下部の自動掃除の設定が4つと充電ドックへの帰還用のボタン

試しにリモコンから手動操作して前進させてみます。

f:id:iwathi3:20171206062306j:plain

おぉ、当たり前なんだけど、本当に進んだ! ラジコンみたいだ!面白い!

充電ドックへの帰還

では先ほどに続いて、充電ドックへの帰還ボタンを押してみます。

ん?全然違う方に進み始めて、部屋を出て行きました。

f:id:iwathi3:20171206062610j:plain

どうやら、充電ドックへの帰還方法はとにかく前に前に進みまくって壁っぽいのを見つけたらそこに沿って動き、壁付近に設置されているはずの充電ドックを見つける、というもののようです。

この充電ドックへの帰還方法だと大きめの部屋(3LDK)を全部掃除させようとしている私としてはちゃんと戻れるのか不安です。うーん、、、本当に大丈夫かな?

スケジュールの設定

スマホから定期実行のスケジュールを設定しました。

平日は仕事で家にいないため11時になったら自動的に実行するように設定しました。

外出先から状態をみると、勝手に清掃中になっています。

f:id:iwathi3:20171206063138j:plain

おぉ!すごい、勝手に掃除してる!素晴らしい!

これは期待できる!

ということでここからは実際にスケジュール機能で動かした結果を書いていきます。

3日連続のエラー

11時に無事動き出したロボット掃除機を12時ごろ仕事の合間に外出先からロボット掃除機の様子を見てみると何かエラーが出ていました。

え、まじかよ。

しかも3日連続です。

では1〜3日目のエラー内容を振り返っていきます。

初日

f:id:iwathi3:20171206063732j:plain

え、なにそれどうなっちゃってんの?

もしかして、どこかの棚の下とかで引っかかっちゃたのかなーとか思い、帰宅をすると、玄関の目の前に普通にいました。

f:id:iwathi3:20171206064408j:plain

どうやら床に這わせていたケーブルにサイドのブラシが引っかかり動けなくなってしまっていたようです。

f:id:iwathi3:20171206064514j:plain

一応ケーブルは床にテープで固定していたのですが、その隙間を縫って引っかかってくれたみたいです。

まあこれはケーブルの敷設が悪かったため私のミスです。

そのあとちゃんとテープで固定しました。

ロボット掃除機!ごめんよ!

2日目

またエラーです。

f:id:iwathi3:20171206063801j:plain

今度はなんだ?センサーの汚れ?ちゃんと動かし始めて2日目だぞ?

家に帰るとソファの下で止まっていました。

f:id:iwathi3:20171206065109j:plain

ひっくり返してみると確かに角についているセンサーがホコリで汚れていました。 LEDのようなものが2つで1セットのような感じになっていたので、仕組みとしてはLEDで照射した光の反射光を受光部でうけることで床との距離を測っているのだと思います。

今回の原因としてはラグの中の目に見えないホコリが多すぎてセンサー部にホコリが付きすぎてしまったというような感じでしょうか。

ちょっと貧弱な気もしますが、ラグにホコリがそんなに溜まるって知らなかったですし、それだけちゃんと掃除してくれてるってことなので、良しとしましょう。

3日目

またまたエラーです。

f:id:iwathi3:20171206063747j:plain

この日のエラーはなかなかヘビーです。 何と言っても、故障ですからね。

3日目にしてタイヤが壊れて、外れて、もう使えなくなってる可能性もあるわけですよね。なにそれツライ。

でももう日々のことですし、家に帰ってからなにが原因なのか、どこで止まってるのか、を確認するのが楽しみになってきました。

今日はどこにいるかなー

f:id:iwathi3:20171206064935j:plain

いました。

いやいや、それ子供がよくやるやつ! 子供がかくれんぼするのにやって可愛いなーとか思うやつ!

裏側を見てみるとがっつりカーテンを巻き込んでました。そりゃあ、タイヤ動かなくなるよね。

カーテンを地面につく長さにしてた私が悪かったです。ごめんなさい。見栄えは悪いけどとりあえず洗濯バサミで裾上げしておきます。

なんか100均で裾上げのいいやつがあると友達が言っていたので後で買ってきます。

よし、とりあえず解決!

エラーからの解放

3日連続のエラーを経て、4〜6日目は無事エラーもなく稼働しているようで、家に帰ると充電ドックでちゃんと充電をしてくれています。

どうやら3日間を経て、ロボット掃除機のお気に召す状態にすることができたようです。

ちなみに3日目にロボット掃除機内のゴミを綺麗にしたにも関わらず、5日目の段階でみるとまた結構な量のゴミが入っていました。

やはり綺麗に見えても目に見えないレベルでゴミは溜まっているみたいです。

毎日掃除するのはめんどくさくて無理だけど、ロボット掃除機が勝手にしてくれるならいいかも。

ただ逆に言えば、ある程度短い頻度でゴミを捨ててあげないと、すぐにいっぱいになってしまうので気をつける必要がありそうです。

嬉しい誤算

使ってみて感じた点をあげていきます。

  • 結構な段差も乗り越えて掃除してくれる
  • 華麗そうに見えてもゴミはあることが分かった
  • 部屋を綺麗に保とうという意識になった
  • 鼻水・くしゃみが軽減した(気がする)

見えないレベルで舞っていたと思われる埃が無くなった影響かもしれませんが、鼻水・くしゃみが軽減した気がします。

ハウスダストのアレルギーなどの方は意外とロボット掃除機に部屋を毎日掃除させるというのもいいのかもしれません。

まとめ

  • ロボット掃除機は人を使って部屋を綺麗にする
  • けど毎日の掃除から人を解放してくれる
  • スケジュール機能・スマホ通知は必要(WiFi付き)
  • 部屋数が多い、部屋が大きい人へオススメ
  • 2万円でこれなら買って大満足!

今後の予定

これは少し難しいかもしれませんが、ウェイトレス的なことが出来たら面白いなーと思っています。

スマホからは、自動掃除モードの他に自分の操作で前進・回転等をすることができます。 この操作をどうにか抜き取って定型動作としてスクリプトを組めば、A点からB点へ移動し戻ってくるということが出来そうです。

そうすれば「OK, Google! キッチンにものを届けて」とかができるので、自分が動かなくても人にものを渡すことができるようになります。

ちなみにルンバだとROIってやつで色々制御できるそうなので最初から移動とか制御したければそちらの方が良さそうですね。

いやーこれはまた楽しそうな課題を見つけてしまった。

GoogleHome miniと会話してプチ人生ドラクエ化してみた

f:id:iwathi3:20171202004246j:plain

人生をドラクエ化したい

 人生ドラクエ化マニュアルという本をちょっと前に読みまして、人生とRPGの融合って考え方は面白いなーとか思ったりしてました。

 ドラクエをプレイしている時の様な感覚で人生に向き合い、自分の目標の達成のために経験値集めてレベルアップしていく、っていうのは理想的な考え方だと思いますし、そうでありたいなーとは思います。

 そういうあるべき姿に感化されたのもあって今回はGoogle Home miniを王様化して人生のプチドラクエ化をしてみました。

Google Home miniを王様化?

簡単に言えば

「自分」が「勇者」という役割を演じ、

Google Home mini」に「王様」を演じさせる

ことで実際に口頭でのロールプレイングを実現しようというものです。

ゲームの中でいうこんな場面ですね。

f:id:iwathi3:20171128062655j:plain


実際にロールプレイしてみた感じはこちら

www.youtube.com


会話での王様のセリフは下記の台詞集から参考にさせていただきました。

ドラクエ1村人会話集

王様との会話の流れに必要な要素

必要な要素は下記の2つです。

  1. 会話のキャッチボール
  2. 発言内容の理解

それぞれについて説明していきます。

1. 会話のキャッチボール

今回は王様との2パターンの大きな会話の流れに関して実装します。

1つ目パターンは「死んだ」場合です。

2つ目のパターンは上記動画の通り、「生還した」場合です。


適当な感じで図にまとめるとこんな感じです。

パターン1「死んだ」場合

 パターン1の「死んだ」場合に関しては王様が「死んでしまうとは なにごとだ! しかたのない やつじゃな。」と一方的に罵声を浴びせてくるだけなので、Google Home miniが「死んだ」という発言を聞き取ったら定型文を喋らせるだけです。

パターン2「生還した」場合

 一方でパターン2の「生還した」場合も基本的にはその繰り返しです。ですがパターン1と異なるのはユーザから同じ内容の返答(はいorいいえ)がくることです。

つまり、返答の内容だけを判断して次の質問を行うことができないということになります。


 下記はユーザの返答だけで次の王様の発言を決定する場合ですが、Noと言い続けるとループしてしまいバグってします。

つまり、王様が永遠にゲームをやめさせてくれないクソゲーになります。


 それを解決するためにどの質問をしたのか?を質問した際に王様は理解していなければなりません。

そこで使うのが状態遷移という考え方です。

monoist.atmarkit.co.jp

 例えば、TVのリモコンは電源のON/OFFをボタン一つで行うことが出来ます。

これは「TV OFF」「TV ON」といった状態という概念があるので、【電源ボタン】というイベントが一つでも、動作を切り替える(遷移)させることができます。

(丸で囲んだ「TV OFF」「TV ON」が状態、【電源ボタン】がイベント、矢印が状態の遷移)


それを踏まえた上で先ほどの全体図をみると、質問・選択肢としては下記の5つがあります。

  1. 会話の選択
  2. 冒険を記録する?
  3. 何番の冒険の書に記録する?
  4. このまま旅を続けるか? x 2
  5. ここまでの冒険消えるよ?

4は同じ質問ですが返答によって次の質問が変わるので合計で6つの状態があることが分かります。

この合計6つの状態によって会話を成立させていきましょう。

2. 発言内容の理解

 続けて「発言内容の理解」に関してです。

ここでは「はい、いいえ」以外の少し理解が必要な内容の理解に関して説明していきます。


今回の例だと「何番の書に記録する?」という質問は他と返答が異なります。

返答の流れとしては

  1. 王様が「何番の書に記録する?」と質問する
  2. ユーザーが「1番の書」と返答する
  3. 王様が「1番の書に記録したぞ」と発言する


 この際、冒険の書が1〜3番までしかないと、4や5と言われても記録できません。 そのためユーザの「●番の書」という発言から●の部分の数字を理解してそれが1〜3なのかを判断をしてあげなくてはいけません。

 ここで、下手したら形態素解析とかって技術が必要になってきそうですが、その辺りはGoogleさんの力を借りて解決します。


ということで、上記を実装する方法であるGoogle DialogFlowを使っていきます。

Action on Google と DialogFlowのセットアップ

この会話をAction on Google と DialogFlow(API.AI)を使う準備をしなければなりません。

開発の準備に関しては下記リンク辺りが参考になるかと思います。

qiita.com

 上記の設定をすることでGoogle Home miniとGoogle Assistantの連携までは完了するはずです。ここまで出来た方はなんとなくGoogle Home miniに自分の言ったことを反応させることができるということはお分かりの状態かと思います。

 では次からは実際にGoogle DialogFlowの説明に移っていきます。

DialogFlow

f:id:iwathi3:20171201225423j:plain

Action on Google のDialogFlowを使用することで会話のキャッチボールをすることができます。

DialogFlowでは下記の機能を使って実装します。

  1. Contextsによる状態遷移の設定
  2. User saysによるユーザ発言の判断条件の設定
  3. Entriesによるユーザー発言の解析・抽出
  4. Text responseによる次の王様の発言の指定


f:id:iwathi3:20171201234702j:plain

会話のキャッチボール

また、質問のための状態設定の例を下記の手順で設定していきます。

  1. Default Welcome Intentへ初期の状態と発言を設定
  2. 「生還した」Intentへ状態と発言の設定

1. Default Welcome Intentで初期状態を設定

 まず、Default Welcome Intentというのが初期にGoogle Home miniが読み上げる内容になるのでそこに状態と発言の設定をします。


やりたいのは「前の質問についての回答かどうか」という判断です。

そのためにContextで状態を取り扱います。

Contextsの「Add output context」に質問用の状態を設定します。

そしてText responseに質問内容・選択肢を入力します。

f:id:iwathi3:20171201235159j:plain

2. 「生還した」Intentへ状態と発言の設定

 続けて行うのは1でした質問に対する返答によって、更に次の質問をするということです。


1で設定した現在の状態をAdd input contextに入力します。

することで、1の質問と今回の返答が紐づく様になり、User saysに「生還した」と入力すると 【1の質問に対する回答が「生還した」だったら】という意味になります。

そして、次の質問をする際には、1と同じようにAdd output contextへ今回の質問用の状態を設定し、Text responseへ質問の内容を記入します。


ここで、現在の状態は不要になるので、頭の数字を0に変更することで削除を行います。

f:id:iwathi3:20171201235617j:plain


基本的にはこの1と2の繰り返しで会話を成立させることができるようになります。 この様にIntent同士のContextsに関係性を持たせることによって会話を実装することができます。

発言内容の理解

まず冒険の書の番号に使うEntitiesを作成しましょう。 ここでは1〜3を使うので1→1のような対応表のように作成を行います。

f:id:iwathi3:20171202002144j:plain

続いて、Actionの部分でENTITYを設定します。

するとUser saysに入力したものが黄色くなり、その部分の意味を変数とヒモつけて抽出してくれるようになります。

最後にText responseでその変数を使った王様の発言を作成すると、ユーザの返答内容の抽出と引用は完了です。

f:id:iwathi3:20171202002001j:plain

こうすることでどの冒険の書に保存するかを聞き取り、保存するようなことができるようになります。


だいたいこの様な流れを繰り返していくことで今回の王様との会話の流れを実装することができます。

ぜひやってみてください。


ちなみに全体で作成した全てのIntentは下記の様な感じです。

f:id:iwathi3:20171202003934j:plain

まとめ

  • あなたは AIスピーカとの会話を 実装できるようになった
  • あなたは Google Home miniを王様化することが できるようになった
  • あなたは 実際にドラクエでの会話の様なことが できるようになった

今後の予定

 今回はとりあえず経験値の値とかは固定値で設定しましたが、自分のその日のTodoの消化具合によって経験値が蓄積されてレベルアップしていくとかTodo消化できなかったら、「死んでしまうとはなさけない」ってなったりする、みたいなのも作れたらいいなーと思っています。

 人生をドラクエ化をすることで、死んだら終わりのクソゲーからスリル満点でワクワクの人生に昇華させたいところです。

Amazonのダンボールを活用!Tシャツ収納のtatemuを自作する

f:id:iwathi3:20171112012811j:plain

Amazonダンボール x Tシャツ

 Amazonダンボール、持て余してませんか?

Amazonって便利でめっちゃ利用しちゃうんですよね。ただ、発送に使われるダンボールの捨てる方法って結構面倒くさくて、ダンボールがどんどん溜まってしまいます。

もっと簡素な発送方法でいいのに!Amazonさん過剰包装だよ!と思った人も多いハズ。

私もその1人で、他の用途に使えない面倒なものがどんどん家の片隅に重なっていく。。。と思っていました。


 そんなAmazonダンボールを活用して作ったものがこちらです。

f:id:iwathi3:20171111151105j:plain

 これはTシャツなどを縦に収納できるようにし本棚等に並べられる様にするもので、既製品としては「tatemu」という商品があります。今回作ったものはそれの互換品にあたります。

【TATEMU-たてむ-】 | バンドー株式会社

tatemuに関しては過去に紹介しているのでそちらを参照していただければと思います。

iwathi3.hatenablog.com

 「tatemu」の素材は硬めのダンボール(?)に切れ目を入れ・穴を空けるといった加工がされているだけのとても簡素な作りになっています。

そのため前々から自作出来そうだと思い何度か挑戦をしていました。その試行錯誤の結果、加工が簡単で材料も手に入りやすいAmazonダンボールが丁度良いと分かったため作り方を紹介します。

使うもの

f:id:iwathi3:20171111141007j:plain

f:id:iwathi3:20171111135852j:plain

手順

  1. Amazonダンボールを解体
  2. tatemuとダンボールを合わせる
  3. ペンでカットする場所をマーキング
  4. カッターでカッティング
  5. 折り目をつける
  6. 完成

1. Amazonダンボールを解体

まずは箱状になっているダンボールを解体していきます。

赤丸で囲った部分が接着剤でくっつけてあるのでそこをカッターなどで切り離してあげれば簡単に解体できます。

f:id:iwathi3:20171111135911p:plain

2. tatemuとダンボールを合わせる

1で解体したものとtatemuを合わせていきます。

この様に角を合わせるようにして固定します。

f:id:iwathi3:20171111135929p:plain

f:id:iwathi3:20171111140009p:plain

f:id:iwathi3:20171111140027p:plain

実はAmazonの底のサイズとtatemuのサイズが似ているため加工の手間が最小限に抑えることができます。

そのためここでしっかりと固定してあげる必要があります。

3. ペンでカットする場所をマーキング

続いて固定したtatemuの外側に沿ってダンボールにペンでマーキングをしていきます。

f:id:iwathi3:20171111140044p:plain

並行四辺形の部分は別々に

外側のマーキングが終わったら続いて中央部(折り目になるの部分)にもマーキングをしていきます。

この部分です。

f:id:iwathi3:20171111140106p:plain

ここはダンボールの方が少し大きいので固定したままだと正しくマーキングができません。

そのため下記の画像の様に順番にマーキングをしていきます。

f:id:iwathi3:20171111140122p:plain

  1. 左側の並行四辺形の内側をマーキングする
  2. 右側の平行四辺形の内側、上部分のみ印をつけておく
  3. ダンボールとtatemuの固定を外す
  4. 印に合わせて右側の平行四辺形の内側にマーキングする
  5. 左右の並行四辺形の上辺に合わせて横線をマーキングする

左右の平行四辺形の位置が変わってしまうとバランスが悪くなってしまうので、強調して書いた2の部分固定を外す前に上辺側に印をつける)を忘れないようにしてください。

4. カッターでカッティング

マーキングし終わったらその箇所をカッティングしていきます。

カッターを使う際はカッティングマットを使うことを忘れずに。

カットする箇所は下記の赤丸の部分

f:id:iwathi3:20171111140138j:plain

5. 折り目をつける

続いて折り目を付けていきます。

折り目をつける場所はこちら

f:id:iwathi3:20171111145021p:plain

f:id:iwathi3:20171111145055j:plain

折り目の付け方

f:id:iwathi3:20171111140239j:plain

  1. カッティングマットを折り目の箇所に当てる
  2. 根本から折っていく

この際に折り目が緩いとしっかりと折りたためなくなってしまいます。

そのため結構ガッツリと折り目をつけておくことをおすすめします。

f:id:iwathi3:20171111140252p:plain

6. 完成

完成した物がこちらです。

f:id:iwathi3:20171111143832j:plain

これがこの様に折りたたみTシャツ収納ができます。

まとめ

  • 家にあるAmazonダンボーを活用
  • ペンとカッターだけで簡単自作
  • 自作tatemuでTシャツをレコードの様にコレクション

 今回の様にAmazonダンボールでtatemuは自作することができます。 なのでtatemuの6枚セットを買って、Amazonでの注文のたびに発送に使われたAmazonダンボールを使って自作するのがコスパ的にはいいかもしれません。

Tattaという類似商品もあるみたいです。

忙しい人のための「デスクトップ焚き火」導入方法【mac】【動く壁紙】

f:id:iwathi3:20171102230543p:plain:w450

焚き火をデスクトップへ導入

実際に導入した様子 (※最大画質が4Kなので注意)

youtu.be


下記の方におすすめ

  • パソコンに向かいっぱなしで気が滅入る。
  • 帰宅後はただただボーっとしたい。
  • なんなら仕事中もボーっとしたい。
  • キャンプに行きたいけど時間が無い。
  • 都会よりも実は自然に触れていたい。
  • 火を見ると落ち着く。



「火を見ると落ち着く」という人以外に疑問に思うのは恐らく


なぜ「焚き火」なのか?


ということだと思う。



youtubeにこんな人気の動画がある。

www.youtube.com


 ひたすら暖炉の薪が燃え続けるという動画だが、再生回数は750万回弱だ。

薪が燃え、火がついている様子というのは人の心を癒やす効果があるらしい。

騙されたと思って一度ボーっと見てみて欲しい。


 だが、忙しい社会人は「ボーっとする時間もとれない」のが実際のところだろう。

では普段見るところに「焚き火」を導入するというアプローチはどうだろう。


 デスク作業の方は普段見ることが多いのはデスクトップだろう。

そこでデスクトップに「動く壁紙」として「焚き火」を実装する。

「動く壁紙」の実装方法

 少し前に「動く初音ミクの壁紙」が話題になっていることがあった。


 実装方法はwindowsの場合、「Wallpaper Engine」というソフトで実現しており、macの場合は「GeekTool」というソフトを使って実現している。

「GeekTool」に関しては以前使っていたという人もいるかもしれない。


詳しくはこちらの方のqiitaに詳しく書かれている。

qiita.com

(※ 全体的に参考にさせていただきました。)


実装方法は一言で言うと


「GeekToolを使ってYoutubeの動画をデスクトップに表示」


という方法だ。

今回この「動く壁紙」の実装方法を使わせていただくことにした。


「動く焚き火」の実装

環境・設定する動画・手順は以下の通り。


環境


設定する動画

www.youtube.com


手順

  1. GeekToolをインストール
  2. githubからzipファイル(or リポジトリ)をダウンロード
  3. 好きな場所で展開
  4. GeekToolでindex.htmlを指定
  5. GeekToolを壁紙として調整


1.GeekToolをインストール

まずはGeekToolをダウンロード


リンク先のDownloadをクリックしダウンロード

f:id:iwathi3:20171030070119p:plain:w450


2.githubからファイルをダウンロード

続いてGeekToolで使用するファイルをダウンロードする。


下記のURLからgithubでフォークしたものを使用する

github.com


下記の様にダウンロードを行う。

f:id:iwathi3:20171101060722p:plain:w450

変更点は音声をミュートにした点だ。壁紙として使う場合音声はない方がいいだろう。



 壁紙とはいえ音を出し続けさせることも可能だ。

フォーク元のファイルを使用すれば焚き火のパチパチという音や鳥のさえずり等も味わえるため、そこは好みで好きな方を使用して欲しい。

GitHub - natmark/wp_engine4geektool: repeating youtube video for geektool to realize wallpaper engine on mac


※ その際は動画IDの変更が必要


3.好きな場所で展開

 githubからダウンロードしたZipファイルを好きな場所へ展開する。

GeekToolでファイルを保存した場所を参照し続けるため場所を変える場合には逐次変更が必要となる。


ここでは下記保管場所に置いたものとする

/Users/【ユーザ名】/Downloads/wp_engine4geektool-master


 フォルダ内にindex.htmlというHTMLファイルがあるのでそれを使用する。

保存場所はCAMPFIREというフォルダの中だ。

f:id:iwathi3:20171101063819p:plain:w450


4.GeekToolからindex.htmlを指定

まずはGeekToolを起動する。


GeekToolを起動するとこの様なウィンドウが現れる

f:id:iwathi3:20171030071742p:plain:w450

webのアイコンをデスクトップへドラッグ&ドロップ

f:id:iwathi3:20171030071817p:plain:w450

すると白い枠が出現するので白い枠内をクリックする。



続いて、index.htmlを指定していく。

横に出現したPropertiesというウィンドウ内の入力欄にindex.htmlの場所を入力する。


/Users/【ユーザ名】/Downloads/wp_engine4geektool-master/CAMPFIRE/index.html


f:id:iwathi3:20171030071850p:plain:w450


すると白い枠内に焚き火が表示される。

f:id:iwathi3:20171030071912p:plain:w450


これでGeekToolへの動画の設定は完了だ。


5.GeekToolの枠を壁紙として調整する

 このままではデスクトップの壁紙として使えないのでサイズ調整をする。


白い枠内の左下にあるアイコンをドラッグ&ドロップすることでサイズ調整ができる。 f:id:iwathi3:20171030072924p:plain:w450


 この様にデスクトップのサイズに白い枠を調整していく。 また白い枠内をドラッグ&ドロップすることで白い枠自体の移動ができる 。


 ディスプレイよりも大きく設定する必要があるため、一度白い枠を左上へ移動させ右下を掴んでディスプレイの右下へ合わせる。

f:id:iwathi3:20171031070045j:plain:w450

最後にGeekToolを閉じれば設定は終了だ。


焚き火 x ミュージック

ここで更に「焚き火」のお供に音楽を提案したい。



私はSpotifyを使っているのでその中のプレイリストを紹介する。

iwathi3.hatenablog.com

Spotifyの「Campfire」で検索した結果表示されたプレイリストをのせておく。



やはり「Campfire」のプレイリストだけあって焚き火の動画と合う。

ぜひプレイリストを再生させながら焚き火を眺めてほしい。



まとめ

  • 疲れたあなたに「焚き火」を提案
  • geektoolを使い簡単に動く壁紙を実現
  • 焚き火のお供に音楽もどうぞ


あとがき

デスクトップやyoutubeで見るのも良いがやはり本物が一番だ。

仙台やキャンプ場の近くなどだとコンビニでも薪を売っている。



ちょっと焚き火だけをしに郊外へでも行ってこようかな。

Withings + IFTTT + ThingSpeakで全自動体重グラフ化

f:id:iwathi3:20171019122631j:plain

全自動で周知ダイエット

しばらく前からダイエットをしている。 「周知ダイエット」だ。

体重計に乗ると勝手に体重計からTwitterに今の体重がつぶやかれる。

更にThingSpeakにもデータが蓄積されグラフが作成される。


実際つぶやかれるものがこの様な感じだ。


また同時に体重変化の推移に関してもグラフ化し公開している。


グラフ化されたものがこちら↓↓。

thingspeak.com


ちなみにこのために自前のサーバやVPS等を用意する必要はない。

今回はIFTTTを使ったグラフ化のやり方を説明していく。


準備


始めに実現に向けた前提条件と必要なものについて述べる。

前提条件

  • サーバレス
  • WiFi環境有り
  • ThingSpeakのAPIを使用可能
  • Withings WS-50のセットアップ済み

IFTTTとThingSpeakの機能を使うのでサーバは不要。


Withingsのセットアップに関しては他のブログなどを参照。

www.chaffflare.jp


ThingSpeakのセットアップに関してはこちらを参照。

iwathi3.hatenablog.com


必要なもの

  • ThingSpeak API
  • IFTTT アカウント
  • Withings WS-50(現 WBS05)

勝手にTwitterにつぶやくために必要な体重計WS-50(WBS05)はこちら

(WithingsがNOKIAに買収されたことにより商品名が変わっている)

ASCII.jp:さよならWithings、ノキアが日本のコンシューマ市場に再参入し6月21日より完全移行


また上記の廉価モデルが出ている。

これは体脂肪等の体組成の計測ができないモデルとはなっている。

5,609円とかなり安くなっているため楽に体重の計測をしたい人におすすめだ。

(2017/10/18 現在)


動作の概要

体重計に乗ってからグラフ化されるまでの流れはこの様になる。

f:id:iwathi3:20171019135742p:plain

設定が必要なのが③・④・⑥の部分だ。

詳しくはセットアップの部分で記述する。

セットアップ

③・④はIFTTTの機能を使いWithings←→ThingSpeakの連携を行う。

「体重測定」をトリガーに設定し、「データ送信」をアクションに設定。


⑥はThingSpeakでデータを格納しグラフ化する器を作る。


構築の手順としてはThingSpeakのAPIキーが必要となるため

ThingSpeakを始めに設定しIFTTTで設定を行う。


大まかなセットアップの手順は下記の通りだ。

  1. ThingSpeakでグラフの器を作成
  2. IFTTTにWithingsとThingSpeak連携させるアプレットを作成

それでは具体的な設定方法を記述していく。


ThingSpeakの設定

 ThingSpeakはチャネルという単位でデータを管理している。 そのため今回のグラフ化に使うチャネルの作成を始めに行う。

Channelの作成

右上のハンバーガーメニューをクリックし、ChannelsからMy Channelsを選択。

f:id:iwathi3:20171019205858p:plain


My Channelsには作成されたChannelが表示される。

今回は新しくChannelを作成するので、New Channelsを押してChannelを作成する。


f:id:iwathi3:20171019210135p:plain

Channelへグラフ(Field)を設定

次に表示されるのが作成するChannelの情報だ。


Name, Description, Field 1〜8等を記入していく。

NameがそのChannelの名前となり、Descriptionが文字通りのその説明。


f:id:iwathi3:20171019210201p:plain

ここではField 1〜4を分かりやすくField 1〜4と名付けている。

Fieldが1グラフを表すこととなる。つまりこの例では4つのグラフが作成されることになる。


実際にはこのField名を「weight」「Fat」等にするのが良いだろう。


f:id:iwathi3:20171019210256p:plain

全て記入が終わったらSave Channelを押す。


すると次の様な画面が表示される。

下の赤丸の様に「Field 1 Chart」というグラフの器が4つ作成されていることが確認できる。


f:id:iwathi3:20171019210315p:plain

これでグラフの作成は完了となる。


API Keyの確認

このChannelを使うためのAPI Keyの確認方法について説明する。


上に並んでいるメニューから「API Key」をクリック。

すると「Write API Key」というところにKeyが表示される。

このAPI Keyを使いThingSpeakへデータを受渡す。


そのためこのAPI Keyをコピーしておく。

f:id:iwathi3:20171019210335p:plain


これでグラフ化するための器の準備は完了だ。


IFTTTの設定

 IFTTTではアプレットという単位でサービス連携の管理をする。

またそのアプレットはトリガーとアクションから構成されている。


始めにアプレットの作成から行っていく。


アプレットの作成

IFTTTへログインをしたら右上のアカウント名をクリックしメニューを開く。

その「New Applet」を選択しアプレットを作成していく。


f:id:iwathi3:20171019210427p:plain

ThingSpeakへデータを送る条件の設定(トリガー)

「this」を押しトリガーを設定していく。

f:id:iwathi3:20171019210445p:plain



次画面ではサービスを選択する。

だが多すぎて探すのが大変なため、検索欄に「Withings」と入力しサービスを絞る。

Withingsのパネルをクリックして選択する。

f:id:iwathi3:20171019210530p:plain



続いてトリガーを設定する。


トリガーに設定するのはそのサービスでの「イベント」だ。

ここでは「Withingsで体重測定を行う」というイベントをトリガーにしたい。

そのため「Body Scale - New Measurement」を選択する。


f:id:iwathi3:20171019210548p:plain


ちなみにWithingsは個人を判別するため、このIFTTTに設定したものは自分が乗ったときにしかグラフ化されない。

そのため家族でこの体重計を共有しても適正に体重の管理をすることができる。


ThingSpeakへ送るデータの設定(アクション)

続いてはアクションの設定をしていく。

これはトリガーが発生した際に「何をするのか」を設定する。


thatを選択する。

f:id:iwathi3:20171019210602p:plain

同じくサービスを選択する。

ここではPOSTリクエストを使用したい。


「webhook」を選択すればPOSTリクエストが可能であるため

先ほどと同様に検索欄に「web」と入力しパネルを選択する。

f:id:iwathi3:20171019210708p:plain

アクションは1つしかない。

「Make a web request」を選択。


f:id:iwathi3:20171019210724p:plain

Web Requestのパラメータ設定

ここでは選択・入力する項目が4つある。

  • URL
  • Method
  • Content Type
  • Body

これはHTTPリクエストをどんな形でどんな風に送信するかの設定だ。

Body以外はThingSpeakのWrite APIを使う場合には共通の内容となる。


そのためBody以外はこの様に記載していく。

f:id:iwathi3:20171019210815p:plain




ここからBodyを記入していく。

記入例としては下の様になる。

f:id:iwathi3:20171019210834p:plain

BodyにはThingSpeakで設定した項目とWithingsのデータ名を入力する。

入力内容は以下の様なフォーマットになる。


key=[①ThingSpeakのAPI key]&[②設定したField名]=[③Withingsデータ名]


上記の様に記入する項目は大きく3つ

  1. 黒塗りされた箇所に先ほどコピーしたThingSpeakで生成されたAPI keyをペースト
  2. 赤下線にThingSpeakで設定したField名(field1 ~ field4)
  3. オレンジ下線にWithingsのデータ(WeightKg, LeanMassKg, FatMassKg, FatPercent)


この様にしてThingSpeakのfield名とWithingsのデータ名を紐づける。

そして紐付けたデータをAPI keyを使い送信する。

そうするとAPI keyと対応するchannelへThingSpeakへデータが送られるという仕組みだ。


全ての記入が終わったら「Create action」ボタンを押す。

f:id:iwathi3:20171019210901p:plain

最後に確認をし、「Finish」を押せば完成だ。

f:id:iwathi3:20171019210915p:plain

作成したアプレットはこのオンオフボタンでいつでも有効・無効を切り替えられる。



あとがき

この様にIFTTTとThingSpeakを使うことでサーバレスでグラフ化が可能性となった。

今回使用したIFTTTのwebhookは他のAPIを使う時に便利なため他のAPIとの連携も試していこうと思う。

※なお、周知ダイエットに関しては効果がないことは身をもって経験済みである。  2017/10/20まででの体重減に関してはまた後日記載予定。

H29応用情報技術者試験(秋季)の午前の予想解答

H29 応用情報処理試験(秋季)の自己採点と予想解答

 

※追記 10/15 23:38 IPA公式で午前の解答が出ました。

IPA 独立行政法人 情報処理推進機構:問題冊子・配点割合・解答例・採点講評(2017、平成29年)

 

自己採点の結果、56問正答で70点だった。

 

マークシートを塗り間違えて無ければ受かってるはずなので

後は午後の結果を祈るのみ。

 

合格発表が12/20って先過ぎる。。。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

 応用情報技術者試験の採点をさっそくしてみた。

午後に関しては記述なので採点が難しいため午前のみ。 

 

 結果としては自己採点だと答えが分からない問題もあり47問正答で58.75点。

配点具合が分からないが、受かっていてもギリギリといったところ。

 

  予想正答 自己解答 判定
問1
問2
問3  
問4
問5
問6
問7
問8
問9
問10
問11
問12
問13
問14
問15
問16
問17
問18
問19
問20
問21
問22
問23
問24 ア?、イ?
問25
問26
問27
問28  
問29
問30
問31
問32
問33
問34
問35  
問36  
問37
問38
問39
問40
問41
問42
問43
問44  
問45
問46
問47
問48  
問49
問50
問51
問52
問53  
問54  
問55
問56
問57
問58  
問59  
問60
問61
問62
問63
問64  
問65
問66
問67
問68
問69
問70
問71
問72
問73 エ?
問74
問75  
問76
問77
問78
問79
問80

 

間違っているところ・また正答がお分かりの方は指摘・コメントしていただけると助かります。

 

もし午前が受かっていれば午後は比較的イケている気がするが、はたして・・・