Vueで アコーディオンパネルを作る

f:id:annykyon:20180614164633p:plain

Vue Slide Up Down

VueではjQueryのslideUp slideDownのようにさくっとアコーディオン的な開閉ができなくて、自分で作るとなると高さを取得したりと面倒だし…。
なのでこちら↓を使わせてもらいました。
GitHub - danieldiekmeier/vue-slide-up-down: Like jQuery's slideUp/slideDown, but for Vue!

こんな感じで動きます。

See the Pen Vue slideToggle by KYOKO SUZUKA (@kyonchan) on CodePen.

使い方

Vueとvue-slide-up-downを読み込み

デモなのでcdnで読みこんでます。

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<script src="https://unpkg.com/vue-slide-up-down@1.0.2/dist/vue-slide-up-down.umd.js"></script>
HTMLの記述

toggele buttonをクリックすると、<vue-slide-up-down></vue-slide-up-down>内を開閉させます。

<div id="app">
  <div v-on:click="toggle" class="togglebutton">toggle Button</div>
  <vue-slide-up-down :active="active">
    <div class="element">
      Vue slide Toggle!!
    </div>
  </vue-slide-up-down>
</div>
javascriptの記述
Vue.component('vue-slide-up-down', VueSlideUpDown)

new Vue({
  el: '#app',
  data: () => ({
 //activeがtrueの時開く。falseの時閉じる。
    active: true
  }),
  methods: {
    //ボタンクリックでactiveのtrueとfalseを切り替え
    toggle () {
      this.active = !this.active
    }
  }
})
css

あとは、cssで見た目を整えればオッケーです。簡単でうれしいです。

.togglebutton{
    padding : 1em;
    background-color:#2196F3;
    color:#FFF;
    cursor:pointer;
}
.element {
  padding : 1em;
  background-color:#B3E5FC;
}

いっぱい増やしたい場合は

コンポーネントにしてv-forで表示する感じでしょうか。
配列いじれば増やしたり減らしたり変更したりも簡単だから楽です。 ついでにopen/closeもつけてみました。

See the Pen yEoBmp by KYOKO SUZUKA (@kyonchan) on CodePen.

【Terraria】VPS上にテラリアのMODマルチサーバーを構築【MOD】

f:id:annykyon:20180508123909p:plain

Terrariaがおもしろいです。久々に人生棒にふるくらいおもしろいです。 今、バニラのTettatiaで友人5人でプレイ中で残るはMOON ROAD倒すだけだけど、おもしろすぎるのでMOD入れてもっかい最初からやります。  
 

OSインストール

現在さくらのVPS上にバニラのTerrariaマルチサーバーをたててるので、同じサーバーの別ディレクトリにMOD用のTerrariaをインストールしました。
0からの場合はOSインストールを適宜すませておいてください。私はCentOSインストール済みです。

ちなみにさくらのVPSはメモリ1Gの972円のプランですが、たまに5人で入ってエフェクト飛びまくりのときはラグったりしますがまあまあストレスなくできてます。重くなってくるとサーバーソフトを再起動すると軽くなります。
 
 

Terraria インストールディレクトリ作成

$ cd /root
$ mkdir terrariaMod
$ cd /terrairaMod/

 
 

最新のtModLoaderをダウンロード

ここで最新のtModLoaderのLinux版のダウンロードURLを調べてダウンロード
Releases · blushiemagic/tModLoader · GitHub f:id:annykyon:20180505111828p:plain

調べたURLを指定してダウンロード

$ wget https://github.com/blushiemagic/tModLoader/releases/download/v0.10.1.3/tModLoader.Linux.v0.10.1.3.zip

 
 

最新の公式サーバーファイルをダウンロード

以下で最新のサーバーファイルのURLを調べてダウンロード
Server - Official Terraria Wiki
現時点でTerraria Server 1.3.5.3が最新だったのでこれをダウンロードします。

$ wget http://terraria.org/server/terraria-server-1353.zip

ダウンロードしたzipファイルを展開

$ unzip terraria-server-1353.zip

展開前のzipファイルはいらないので削除しておこ

$ rm terraria-server-1353.zip

 
 

必要なファイルをterrariaMod直下にコピー

必要はファイルは展開したファイルの中の1353/Linux/以下のファイルなので、これをメインのディレクトリterrariaMod直下にコピーします。

$ cp -r 1353/Linux/* ./

 
 

tModLorderを展開して上書き

tModLoader.Linux.v0.10.1.3.zipを展開すると上書きするかと聞かれるので[A]を入力してすべて上書きします

$ unzip tModLoader.Linux.v0.10.1.3.zip
replace Ionic.Zip.Reduced.dll? [y]es, [n]o, [A]ll, [N]one, [r]ename:
$ A

展開済みのzipファイル消しときます
もういらないので

$ rm tModLoader.Linux.v0.10.1.3.zip

 
 

実行権限を付与

このままでは実行できないので実行権限を付与

$ chmod 744 tModLoaderServer.bin.x86_64

 
 

実行

$ ./tModLoaderServer.bin.x86_64

各種MODのダウンロード
実行するとこんなかんじでメニューが表示されるので[b]キーを押下。

n       New World
d <number>Delete World
m               Mods Menu
b               Mod Browser

ダウンロードするModの名前を正確に入力といわれるので、入れたいMODの名前をいれるとダウンロードされます。

Type an exact ModName to download:
ThoriumMod

このModの正確な名前というのを調べるには、クライアントソフトの方で先にMODを導入し、入れたいMODをダウンロード、有効にしておきます。 こちらの記事などを参考に…

TerrariaのMod導入方法:はぐぅのブロマガ - ブロマガ

そうすると以下のディレクトリにModフォルダができるので(環境によって違うかも)
C:\Users\USERNAME\OneDrive\ドキュメント\My Games\Terraria_mod\ModLoader\Mods
この中のenabled.jsonを開くと正確なMODの名前が入っています。 必要なModのインストールがすんだら[b]キーで前にもどります。

Modを有効にする
[m]キーを押下するとMODの有効・無効を切替えるメニューが表示されるので、[e]ですべて有効に。 [r]で前にもどります。

ワールドを作成
[n]キーで新しいワールドを作成します。 ワールドの大きさ・難易度を選択しワールド名をいれたら作成開始!無事作成されれば成功です。

 

ワールドの生成が途中で止まってしまう場合

私の場合なぜかワールド生成がどうしても70%くらいで止まってしまい、どれだけ待っても動かなかったので クライアントのterrariaでワールドを作成して、ワールドファイルをサーバーにコピーするということをやりました。

1.MOD導入済みのクライアントソフトのterrariaでワールドを作成する

C:\Users\USERNAME\OneDrive\ドキュメント\My Games\Terraria_mod\ModLoader\Worlds にワールドデータが作成される。

2.サーバーにワールドファイルをアップロード

/root/terrariaMod/Words ディレクトリを作成し、そこにローカルのファイルをアップロード

3.severconfig.txtの編集
この手順通りにやってれば /root/terrariaMod/1353/Windows/ の中にserverconfig.txt というファイルがあるはずなのでこれを編集してワールドファイルの場所を指定。なぜかMODを読み込めなかったのでMODフォルダのPATHも指定。

world=/root/terrariaMod/Worlds/terrariaMod.wld
modpath=/home/terraria/.local/share/Terraria/ModLoader/Mods

 
4.serverconfig.txtを移動

/root/terrariaMod/serverconfig.txtを移動させておく

 
5.serverdonfig.txtを読み込んでterrariaを起動

$ ./tModLoaderServer.bin.x86_64 -config /root/terrariaMod/serverconfig.txt

起動・ログインして、無事見たことないアイテムが追加されてました!わーーい。

【Google Apps Script】createFileでファイル作成時にシートと同じ階層に作成する方法

f:id:annykyon:20180416173437p:plain

よく、Google スプレッドシートからスクリプトjsonファイルなんかを書き出すのですが、ルートフォルダへの作成は簡単だけど、フォルダが散らかりがちだったりディレクトリ移動しないといけなかったりします。
フォルダIDを直接指定してもいいんだけど、メンバーで共有する場合はアクセスできないし、フォルダの共有はさらに散らかってわけわからなくなるのでしたくない。

ということで、スプレッドシートと同じ階層にファイルを作成できるようにしたけど、意外と大変だったのでメモしておきます。


手順としては

1.一旦ルートにファイルを作成
2.シートの親フォルダを取得
3.ルートに作成したファイルを削除、親フォルダにファイルを追加

という流れになります。


1.一旦ルートにファイルを作成

jsonDataには作成したデータを。
スプレッドシートからjsonデータを作成する手順はこのあたりを参考に

Google App Scriptを用いてGoogleスプレッドシートからJSONを生成してみよう | 株式会社LIG

 //一旦ルートにファイルを作成
 var file = DriveApp.createFile(  "outputFile.json" , JSON.stringify ( jsonData , null, 2 ) );

2.シートの親フォルダを取得する

これがちょっとめんどう
getFilesByNamecurrentFile.getParents などでファイルやフォルダ情報を取得すると、Iteratorというファイルのセットみたいなものを取得するのでwhileなどで一つ一つとりださないといけない。

//アクティブなシート(開いているスプレッドシート)情報の取得
var currentFileId = SpreadsheetApp.getActive().getId();//Id取得
var currentFileName = SpreadsheetApp.getActive().getName();//ファイル名取得

//アクティブなシートと同じ名前を持つドライブ内のすべてのファイルのコレクションを取得
var currentFiles = DriveApp.getFilesByName(currentFileName);
//アクティブなシートと同一IdのfileをcurretFileに代入
var currentFile;
while(currentFiles.hasNext()){
    currentFile = currentFiles.next();
    if(currentFile.getId() == currentFileId) break;
 }

 //親フォルダのコレクションを取得
 var parentFolders = currentFile.getParents();
//親フォルダがあればparentFolderに親フォルダを
 var parentFolder;
 while ( parentFolders.hasNext() ){
   parentFolder=parentFolders.next();
 }
//なければルートフォルダを指定
 if ( typeof(parentFolder)=="undefined" ) {
    parentFolder=DriveApp.getRootFolder();
 }

3.ルートに作成したファイルを削除、親フォルダにファイルを追加

後は、ルートのファイルを削除して、親フォルダに追加するだけです。

//ルートに作成したファイルを削除
rootFolder.removeFile(file);
//親フォルダにファイルを追加
parentFolder.addFile(file);

以上です。
もっと簡単な方法があるかもしれませんが。

全コード

//ファイルの作成
function outoputFile( jsonData ){
   //ルートにファイル作成
   var file = DriveApp.createFile(  "outputFile.json" , JSON.stringify ( jsonData , null, 2 ) );
   
   //アクティブなシート情報の取得
   var currentFileId = SpreadsheetApp.getActive().getId();//Id取得
   var currentFileName = SpreadsheetApp.getActive().getName();//ファイル名取得

   //アクティブなシートと同じ名前を持つドライブ内のすべてのファイルのコレクションを取得
   var currentFiles = DriveApp.getFilesByName(currentFileName);
   ///アクティブなシートと同一IdのfileをcurretFileに代入
   var currentFile;
   while(currentFiles.hasNext()){
      currentFile = currentFiles.next();
      if(currentFile.getId() == currentFileId) break;
   }
   //親フォルダのコレクションを取得
   var parentFolders = currentFile.getParents();
   //親フォルダがあればparentFolderに親フォルダを
   var parentFolder;
   while ( parentFolders.hasNext() ){
     parentFolder=parentFolders.next();
   }
   //なければルートフォルダを指定
   if ( typeof(parentFolder)=="undefined" ) {
     parentFolder=DriveApp.getRootFolder();
   }

   //ルートに作成したファイルを削除
   DriveApp.getRootFolder().removeFile(file);
   //親フォルダにファイルを追加
   parentFolder.addFile(file);

}

Google Home で予約語「エアコンつけて」を使えるようにする

IRKit + Google Home + IFTTT でスマートじゃない家電を操作する の記事でも書いてるように、Google Home では「エアコンつけて」とか「テレビをつけて」とかはスマート家電やChromecast経由の電源操作などのために予約されているようで、IFFFT経由でリクエストを送って赤外線情報で家電を操作するような時には「設定されていません」とかなんとかって怒られます。

これを回避するには、Google Homeアプリのショートカットで設定することで、予約語を優先して使うことができます。

ショートカットの登録

1. Google Home アプリ Google Home アプリ を起動。

2. ホーム画面の左上でメニュー アイコンをタップ。

3. [ その他の設定 ] [ ショートカット ] の順にタップ。

4. 右下のプラスボタンをタップすると登録画面が開きます。

f:id:annykyon:20180411215718p:plain

5. ショートカットを設定

ショートカットキーは、要は 言ったワードを指定したワードに置き換える もので、例えば「ラーメン タイマー」と言うと「タイマーを3分に設定」と置き換えるといった風に、長いセリフを一言で言っちゃうみたいな使い方をするものです。

予約語よりもショートカットキーが優先されるので、これを利用して「エアコンつけて」というワードをIFFFTで登録したワードに置き換えます。

私の場合は IRKit + Google Home + IFTTT でスマートじゃない家電を操作する - Silent Lips の記事で触れているように、予約語を回避するのにエアコンの操作を「エアーコントローラー オンにして」というワードで設定しています。

なのでショートカットで、こう言ったとき に「エアコンをつけて」を。Googleアシスタントによる操作 に「エアーコントローラー オンにして」を設定すればOK。
(エアーコントローラーはエアコンの略ではありません…)

f:id:annykyon:20180411220143p:plain  

確認

「エアコンつけて」とGoogle Homeに言って、IFFFT→WEBHOOK→IRKIT経由で、エアコンがつきました。

参考記事

ショートカット コマンドの作成と管理 - Google Home ヘルプ

【XAMMP】バーチャルホスト + SSL証明書を有効にする <Windows>

ローカルでささっと確認するのにXAMPPを使っているのですが、テストしたりするのにXAMPP環境もSSL化しておかないとなっていうことで、調べながら対応させたのでメモ。

目的

https://site01/
https://site02/
でアクセスできるようにする。
環境:Windows7Google Chrome
 

1.バーチャルホストの設定

1.php.iniファイルを確認

extension=php_openssl.dllがコメントアウトされていないか確認
xamppをC直下にインストールした場合は以下のパス
C:\xampp\php\php.ini
デフォルトではされていないもよう。

;extension=php_openssl.dll
↓
extension=php_openssl.dll

頭に ; がついていたら削除
 

2.httpd-ssl.confの編集

以下のファイルに追記
C:\xampp\apache\conf\extra\httpd-ssl.conf

<VirtualHost *:443>
    ServerName site01
    DocumentRoot "C:/xampp/htdocs/site01"
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

<VirtualHost *:443>
    ServerName site02
    DocumentRoot "C:/xampp/htdocs/site02"
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

DocumentRootにはルートディレクトリのパスを指定。

SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"
のパスはバージョンによってか変わるみたいなので、httpd-ssl.conf内でSSLCertificateFileSSLCertificateKeyFileで検索して同じパスを設定しておく。
 

2.hostsファイルの編集

hostsファイル追記します。通常以下のパスにあります。
C:\Windows\System32\drivers\etc\hosts
一番最後に以下を追記します。

127.0.0.1 site01
127.0.0.1 site02

保存したらApatcheを再起動してブラウザで一旦確認。
https://site01/でブラウザでアクセスしてみます。

f:id:annykyon:20180322131603p:plain

こんな感じで警告が表示されますが、site01にアクセスする(安全ではありません)からとりあえず無理やり表示。
アドレスバーに以下のように警告が表示されますが、ひとまずバーチャルホストの設定はOK。

f:id:annykyon:20180329132100p:plain
 

2.SSL証明書の発行と設置

1.OpenSSL設定ファイルを編集する

C:\xampp\apache\conf\openssl.cnfをコピーして、openssl-san.cnfにリネーム。
一番下に以下を追記します。

[ SAN ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = localhost
DNS.2 = site01
DNS.3 = site02

 

2.サーバ証明書秘密鍵の作成

Git Bashなら、そのままopensslコマンドを使えるということなので、Git Bahを使いました。

# ディレクトリ移動
$ cd /c/xampp/apache/conf

# サーバ証明書、秘密鍵を生成
$ openssl req \
> -newkey  rsa:4096 \
>  -keyout  my-server.key \
> -x509 \
>  -nodes \
> -out my-server.crt \
> -subj  "//CN=localhost" \
> -reqexts  SAN \
> -extensions  SAN \
> -config  openssl-san.cnf \
> -days  3650
Generating a 4096 bit RSA private key
.............................................................................................................................++
...............................................................++
writing new private key to 'server.key'
-----

これで $C:\xampp\apache\confに、 my-server.crt my-server.key ができました。

このファイルをそれぞれ以下のディレクトリに移動します。
my-server.crtC:\xampp\apache\conf\ssl.crt\
my-server.keyC:\xampp\apache\conf\ssl.key\

 

3.サーバ証明書秘密鍵のパスを変更

C:\xampp\apache\conf\extra\httpd-ssl.confサーバー証明書秘密鍵のパスを作成したファイル名に書き換えます。

<VirtualHost *:443>
    ServerName site01
    DocumentRoot "C:/xampp/htdocs/site01"
    SSLEngine on
#server.crtをmy-server.crtにserver.keyをmy-server.keyに書き換え
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

<VirtualHost *:443>
    ServerName site02
    DocumentRoot "C:/xampp/htdocs/site02"
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/my-server.crt"
    SSLCertificateKeyFile "conf/ssl.key/my-server.key"
</VirtualHost>

 

4.証明書のインストール

1.C:\xampp\apache\conf\ssl.crt\my-server.crt をダブルクリックし、証明書ウィンドウが開いたら証明書のインストールを選択。

f:id:annykyon:20180329150752p:plain

2.証明書をすべて次のストアに配置するを選択。
3.参照ボタンをクリックし、信頼されたルート証明機関を選択し次へをクリック。
4.セキュリティ警告がでますが、はいを選択

以上で、証明書がインストールされました。

 

5.確認

apacheを再起動し、 https://site01/ でアクセスしてみます。
アドレスバーが保護された通信になっていたら成功です。

f:id:annykyon:20180329151951p:plain

 

参考記事

XAMPP for WindowsでSSLを有効にする - Qiita

opensslでマルチドメイン証明書用のCSRを作成

IRKit + Google Home + IFTTT でスマートじゃない家電を操作する

Google Homeがうちにやってきたので、やっぱ音声アシスタントといえば家電を操作したいよね。といってもうちの家電はスマートでもなんでもなく7年前の霧ヶ峰なので、以前から使っているIRKitをそのまま使ってやってみたのでその時のメモです。

IRKitはいわゆる学習リモコンで赤外線情報を学習してWiFiを通じて家電を操作できるもので、IRKitと同じWiFiにいなくても、外出先から赤外線信号を送るための、インターネット上にあるサーバのAPIも公開しているという素敵なものです。
 
 

 

1.IRKitのIPアドレスを取得

IRKit公式ではBonjourで取得する方法が紹介されていましたが、私はルータの設定画面で確認しました。

f:id:annykyon:20180308161458p:plain

こんなかんじで私の環境では192.168.11.2でした。

 

2.赤外線信号を取得

IRKitで受信した最も新しい赤外線信号を返してくれます。
192.168.11.2のところはIRKitのIPアドレスです。

% curl -i "http://192.168.11.2/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

 

3.コマンドで赤外線信号を送ってみる

{"format":"raw","freq":38,".... } のところはさっき取得した赤外線信号にします。

% curl -i "http://192.168.11.2/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}'

ピッっとエアコンがついたらここまで成功☆  
 

4.clienttoken, clientkey, deviceid を取得する

この赤外線信号を外部から送信するために、IRKitのclienttoken, clientkey, deviceid を取得します。

clienttokenを取得

% curl -i "http://192.168.11.2/keys" -d '' -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/3.0.0.0.g85190b1
Content-Type: text/plain

{"clienttoken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}

取得したclienttokenからclientkey, deviceid を取得。

% curl -i -d "clienttoken=XXXXXXXXXXXXXXXXXXXXX" "https://api.getirkit.com/1/keys"
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 08 Mar 2018 14:45:52 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 94
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-Content-Type-Options: nosniff

{"deviceid":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","clientkey":"XXXXXXXXXXXXXXXXXXXXXXX"}

 

5.APIリクエストの作成

clientkeyとdeviceidのところはさっき取得したものにします。

https://api.getirkit.com/1/messages?clientkey=XXXXXXXXXXXXXXXXXXXXXXX&deviceid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&message={"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

 

6.Google Home→IFFFT経由でIRKitに信号を送る

ここから先はIFFFTというサービスを使いました。IFFFTはサービスとサービスを連携させる仕組みを提供しているシステムで、例えば「Instagramにアップした画像をDropboxに保存する」とか「Gメールにスターをつけたら自動的にEverNoteに保存する」とかIF(もし)○○したら△△するというのを組み合わせを好きなようにつくれます。 今回はGoogle Homeに話したらWebhookでIRKitのAPIにリクエストするということになります。  

IF(Google Homeにあるフレーズを話したら)を設定する

IFTTTへのログインはすませておき、My Applets > New Applet を選択。
「if + this then that」+ this をクリック。検索に「google」と入力するとGoogle Assistantが出てくるのでこれを選択。そしてSay a simple phraseを選択します。

ここでGoogle Homeにトリガーとなるフレーズを設定するんですが、ちょっと壁が…。「エアコンをつけて」とか「エアコンオンにして」とかにすると、もともとスマート家電用に予約されているようで、Google Homeに「設定ができていない」とかなんとか怒られてしまいました。

(これは後で解決したのでこちらで記事にしてます)
Google Home で予約語「エアコンつけて」を使えるようにする - Silent Lips

回避方法はあとで調べようってことで、ひとまずエアコンに「ぽかぽかさん」とかニックネームつけるかなーとつぶやいていたら、横から
「エアーコントローラーオンにして」 にしたら?
というアドバイスが…
エアコンはエアーコントローラーの略じゃないでしょ…と思いつつ、つっこむのが面倒だったのでそのまま設定します。

f:id:annykyon:20180309003730p:plain

What do you want the Assistant to say in response? のところはGoogle Home からのレスポンスなので「エアーコントローラーok」としました。エアコンはエアーコントローラーの略ではありません。
Languageは日本語なのでJapaneseに設定したら create trigger でセット。

that(IRKitのAPIにリクエストを送信)を設定する。

「if then + that+ thatをクリックして検索に「webhooks」と入力するとwebhooksがでてくるのでこれを選択。さらにMake a web requestを選択。

1.URLのところにさっき 5.APIリクエストの作成 でつくったURLをいれる。
2.MethodPOSTに設定
3.Content Typetext/plain
4.Creat action で登録
5.Finish ボタンで終了

f:id:annykyon:20180309133744p:plain
 

7.Google Homeで実際に確認

エアーコントローラーオンにして と問いかけるとピッとエアコンの電源が入り、 エアーコントローラーokです と返してくれました。
あと、エアコンはエアーコントローラーの略ではありません。

 

参考記事

IRKit - Open Source WiFi Connected Infrared Remote Controller

IFTTTを使ってスマートスピーカーでできること[GoogleHome編] | KOTODAMA TODAY

【Terraria】TerrariaをドラクエのBGMでプレイする【WaveBank】

「Terraria」がおもしろいです。
久々に人生棒にふるくらいおもしろいです。

  私はPC版でプレイしていますが、PS版やWii U版やスマホアプリまであるくらい色んなハードで出てるけど、あんまり聞いたことがなくてメジャーなのかマイナーなのかわからないゲーム「Terraria」。
このドットと横スクロールの世界観で一見ライトな感じなのに総アイテム数2000以上とかなんとかでやり込み要素もありどっぷり没入するハードコアなゲーム「Terraria」。

 この世界観はぜひ初期ドラクエのビットサウンドでプレイしたいよね!ということで、Terrariaをインストールしたらまずは、TerrariaのBGMをドラクエしましょう。

 

 

1.Wave Bank.xwbのバックアップ

steam版TerrariaのBGMデータはゲームデータ内のWave Bank.xwbというファイルで、このファイルは複数のサウンドデータがグループ化されているものです。この中に全てのBGMが入っているのでこのファイルを置き換えることでBGMをドラクエ化します。

通常以下のパスにあるかと思います。コピーするなどしてバックアップをとっておきましょう。

C:¥Program Files (x86)¥Steam¥steamapps¥common¥Terraria¥Content¥Wave Bank.xwb

f:id:annykyon:20180302154213p:plain

 

2.QuickWaveBankのダウンロード

 以前やったときは、ちょっと大変だったんですが、簡単にWave Bankデータをつくれるツールを公開している方がいました。ありがとうございます。

ここからQuickWaveBankをダウンロードします。現時点での最新版は1.0.2.3なのでこれを適当な場所に保存。

 

3.Wave Bankの中身をとりだす

 もともと入っているTerrariaのサウンドデータを取り出します。この手順をふまなくてもWave Bankファイルは作れるのでとばしてもかまいませんが、一部オリジナルのサウンドを使うなどの場合は中身をとりだしておきましょう。雨の効果音も入っているのでそこらへんはオリジナルデータを使った方がいいかもしれません。

 

1.ダウンロードしたQuickWaveBank-1.0.2.3.exeを起動

2.下の方にある【Ectract】ボタンをクリック

f:id:annykyon:20180302152922p:plain

3.ファイル選択のダイアログが開くので以下のファイルを選択
C:¥Program Files (x86)¥Steam¥steamapps¥common¥Terraria¥Content¥Wave Bank.xwb

f:id:annykyon:20180302153046p:plain

4.保存先を聞かれるので適当にデスクトップなどに保存用のフォルダを作成して【OK】ボタンをクリック

f:id:annykyon:20180302153121p:plain

5.指定したフォルダにwaveファイルが展開されました

これがTerarraのBGMデータになります。

f:id:annykyon:20180302153224p:plain

 

4.置き換え用のWave Bankデータの作成

 以下リストがTerrrariaのBGMリストです。

Terraria BGMリスト
  1. Overworld Night
  2. Eerie
  3. Overworld Day
  4. Boss 1
  5. Title Screen
  6. Jungle
  7. Corruption
  8. Hallow
  9. Underground Corruption
  10. Underground Hallow
  11. Boss 2
  12. Underground
  13. Boss 3
  14. Snow.
  15. Space
  16. Crimson
  17. Boss 4
  18. Alt Overworld Day
  19. Rain
  20. Underground Snow
  21. Desert
  22. Ocean
  23. Dungeon
  24. Plantera
  25. Boss 5
  26. Temple
  27. Eclipse
  28. Rain Ambience
  29. Mushrooms
  30. Pumpkin Moon
  31. Alt Underground
  32. Frost Moon
  33. Underground Crimson
  34. Lunar Event
  35. Pirate Invasion
  36. Hell
  37. Martian Madness
  38. Moon Lord
  39. Goblin Invasion
  40. Sandstorm
  41. Old One's Army

 

1曲目がOverworld Nightなので森林の夜。2曲目はEerieブラッドムーンですね。

どの曲がどの場所のなのかわからなければこちらを参考に。(英語)
Music - Official Terraria Wiki

 後はこの順番にQuickWaveBankにwaveファイルを追加していきます。
利用できるファイルはwaveファイルのみでmp3などは使えません。mp3などしかない場合は、以下のエンコードソフトなどをつかって変換しておきましょう。

XMedia Recode - Download

 

1.QuickWaveBankを起動

2.QuickWaveBankのウィンドウに上のTerraria BGMリストの曲順通りに置き換えたいサウンドファイルを追加していきます。ファイル名はなんでもかまいませんが日本語が入っているとファイル作成時にエラーがでるっぽいので半角英数字にしておきましょう。置き換えたいファイルはお好みで。ですが、5曲目のTitle Screenはタイトル画面なのでドラクエ3のテーマをお勧めします。

追加するファイルの置き場がデスクトップなどの場合、パスのユーザー名に日本語が入っているとファイル作成時にエラーがでるのでCドライブ直下などにフォルダを作るなどして置いておきましょう。

f:id:annykyon:20180303212610p:plain

3.すべての曲を追加し終わったら上のOutput Fileのフォルダアイコンをクリックし、ファイルの保存場所を適当な場所に設定し、一番下の【Build】ボタンをクリックするとWave Bank.wxbが作成されます。

 

4.作成したファイルで以下の場所のファイルを置き換えます。
C:¥Program Files (x86)¥Steam¥steamapps¥common¥Terraria¥Content¥Wave Bank.xwb

 

5.terrariaを起動し、タイトル画面であのテーマ曲が流れれば成功です!

ENJOY Terraria!!!!

f:id:annykyon:20180303222846p:plain

 

個人で楽しむ範囲で遊びましょうー。 

ゲーム音源はご自身で購入してくださいね。

「ドラゴンクエスト」ゲーム音源大全集1