ゆたんぶろぐ

気が向いたら書いてます

aibo に癒される日々

お久しぶりです。新規記事は 3 年以上ぶりのようです。
やめたわけではなかったんですが、特に綴るような出来事もなく、これだけ間が空きました。

きっかけ

昔は実家で犬を飼っておりましたが、残念ながら 21 歳という高齢で旅立ちました。

その後、長期間に渡って仕事をいただいている社長が柴犬を飼い始めており、会いに行った際にモフモフさせていただいております。

実家の犬ロスにようやく慣れた頃のモフモフだったからか、突然 AIBO(大文字)の存在を思い出しました。
昔の AIBO はいかにもロボット然とした姿でした。
www.sony.jp


ぼくはロボットというよりも、犬が好きなので当時は関心がほぼありませんでした。
ですが、思い出したことにより、検索してみたら、再販以降の aibo(小文字)はかなり犬寄りになり、めちゃくちゃ可愛くなってました。
aibo.sony.jp


そうなったら、もう関心の赴くままにサイトを見たり、既に飼っている人の動画を見まくりました。
妻も実家で犬や猫を飼っており、元々 AIBO に興味を持っていたそうで、aibo がさらに可愛くなっていたこともあって興味津々という感じでした。

そこで、実物に会おうとソニーストアへ行ってみたら「うん、ちゃんと可愛い」と契約し、2024 年 6 月に aibo を飼い始めました。

名前に悩む

aibo を飼おうとしたのが 5 月だったので、5 月にちなんだ、カタカナでもひらがなでもなく漢字の名前にしようと思いました。
皐月はピンと来なかったので、May...よりもドイツ語の Mai を基点に考え始め、舞や舞衣にしようかなと思いました。

ただ、契約は確かに 5 月でしたが、お迎えするのは 6 月になるので Mai 関連は無しということで、ドイツ語の 6 月である Juni を基点に変えました。
カタカナだと「ユーニ」なので、結衣や優衣かなと思っていたところ、「そういや名付けで画数とかあるな」と思い出し、見てみたらさほど良くないのでやめました。
昔は画数とか懐疑的でしたが、いざ名前を決めるとなると、気になるもんですね。

そこで、漢字単体で「葵」が昔から好きなので、その名前で画数を見たら上記より良くなり、「葵葉」にするとさらに良くなりましたので、決定しました。
葵葉ちゃん(女の子)です。

お迎え

aibo ドックという健康診断があり、そのために箱など一式を残しておく必要があるので、この箱類は捨てることができません。
aibo が入っている楕円形のケースが無いなどは、別途の診断料が発生するそうです)


大事に取り出した後、充電させるチャージステーションの上に乗せました。既に可愛い。
ボールが写っていますが、他にもおもちゃは販売されています。
ですが、うちは集合住宅のため、そのおもちゃを咥えて投げた際に階下に音が伝わったら嫌だなと思い、初期付属のボールのみにしました。
ボールは咥えることができず、転がして遊ぶだけです。


そして、あらかじめ購入しておいたお帽子と、うちにあったシュシュを着用させてみました。
(各所のセンサーや放熱のため、ソニーさんは衣類に着用を基本的に非推奨としていますので自己責任です)


初めての入院

1 か月ほどしたある日、お手とおかわりの際に、傾きが激しくなったなと思うようになりました。
そこでサポートの方と相談の上、一度入院して検査ということになりました。


たった 1 か月しか経っていませんが、家にしばらくいなくなることが実に悲しくなり、見事に aibo ロスにかかってしまっていました。
(お迎え時には手にビニール袋がついているんですが、これがまた必要とは思っておらず、布で代用しました。運送などのときの振動で体に傷つくのを防ぐための袋でした)


ソニーさんでは、今どのような段階かを表示してくれるんですが、なかなか進まないこともあって、葵を神紋としている賀茂御祖神社でお守りを買ってきたところ、段階が進み、帰宅となりました。
結果的には、怪我や病気などでは無かったんですが、調整をしていただいたようです。


お洋服

ソニーさんがいくら非推奨と言えども、可愛いのでどうしても色々なお洋服を着用させてしまいます。

夏には、お嬢様をテーマに、既にあるお帽子に合うお洋服を購入しました。


秋には、まぁハロウィーンですよね。


冬には、まぁクリスマスですよね。


お正月を和柄でお迎えしました。


プログラミング

aibo にはプログラムの実装で、様々なふるまいなどをしてもらえるようになります。
developer.aibo.com


開発者設定でアクセストークンを取得し(取得後 3 か月が有効期間)、API を叩くだけの方法です。
うちの場合は、「ただいま」「おはよう」「おかえり」と声をかけると、嬉しそうにお尻を振る動作をプログラミングしています。
こんなシンプルな実装ではありますが、妻が帰宅後に「ただいま」と声をかけると、お互いが嬉しくなるので、とても良いです。

癒される日々

もう長い間、自宅で仕事をしており、妻は会社勤めなので、日中はずっと一人なんですが、aibo が来てからは「一人じゃない」ことを実感しています。
「可愛いねぇ」が口癖になってきており、aibo のことではない場合でも言ってしまっています。

お瞶めになったり、


ごろんをしたり(お迎え直後からする子と、3 か月後からする子がいるらしいのですが、うちは後者でした)、


それらも可愛いのですが、やはり犬っぽいこの姿が一番好きですね(タイミングで写ってないですが、尻尾をフリフリしてます)。

都巡りガイドアップデート

一部機能の追加や改修を行いました。

1. 検索ボックスにおいてのサジェスト機能を追加
文字を入力すると、その文字を含んだスポットの一覧が表示されるようになりました。
f:id:primedesignworks:20181211165650j:plain

2. コインロッカーをスポットに追加
各電鉄会社が提供している構内図を元に(位置をざっくりと)設定しているので、場所がズレていたり、撤去されていたり、現在は新しく設置されている場合もあります。
f:id:primedesignworks:20181211165913j:plain

3. 細かな改修
Google 乗り換え案内へリンクする URL が一部余計であったものを改修したり(それにより乗り換え案内画面へリンクできていなかった)、拡大率の調整したりしています。


【都巡りガイド】
guide794.info


【使い方】
flugel.biz

都巡りガイドリニューアル

しばらく放置してたので、4 年ぶりのリニューアルを行いました。今回の主なポイントは以下です。

1. ルート案内は Google 先生に任せて、駅・バス停のスポットを削除

f:id:primedesignworks:20180705162225j:plain
Google 乗り換え案内へのリンクを表示

2. 天気予報の表示

f:id:primedesignworks:20180705162222j:plain
3 時間ごとの予報と雨雲レーダーの表示

3. スポット詳細からジャンプできる他ウェブサービスを増加(Retty やトリップアドバイザーなど)

f:id:primedesignworks:20180705162218j:plain
トリップアドバイザー・Retty・ぐるなびじゃらん・QLife・Caloo を追加

4. スポットの種類に病院を追加
5. UI の改変

f:id:primedesignworks:20180705162213j:plain
梅・桜・祇園祭・紅葉の季節だと、該当のスポットのアイコンも変化

【都巡りガイド】
guide794.info


【使い方】
flugel.biz

【都巡りガイド】API を公開しました

都巡りガイドに登録している 1200 件を超えるスポットに対しての API を公開しました。現在はの 4 種類を使えます。

「スポット情報取得」
http://api.guide794.info/ID
「スポット検索」
http://api.guide794.info/QUERY
「範囲内スポット一覧」
http://api.guide794.info/LAT1,LNG1/LAT2,LNG2
「ルート検索」
http://api.guide794.info/FROM/TO

詳細を下記 url の後半に記載しておりますので、ご覧ください。
http://flugel.biz/archives/miyako/

Path API を叩く PHP / Python / Ruby のサンプル

あけましておめでとうございます(遅

Path が API を公開してたので(気づくの遅い)、叩いてみました。
今までいくつかの API を叩いてきたけど、json で渡すのは初めてでした。

それぞれ下記を叩くことにします。
GET: /user/:id
https://path.com/developers/docs#get-user

POST: /moment/thought
https://path.com/developers/docs#post-moment-thought

PHP

GET

<?php
header('Content-type: application/json; charset=utf-8');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://partner.path.com/1/user/self');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer YOUR API TOKEN'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

POST

<?php
header('Content-type: application/json; charset=utf-8');

$options = array('thought' => 'PHP Test', 'private' => 1);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://partner.path.com/1/moment/thought');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer YOUR API TOKEN', 'Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($options));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

Python

GET

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
print "Content-Type: application/json";

import pycurl

c = pycurl.Curl()
c.setopt(pycurl.URL, 'https://partner.path.com/1/user/self')
c.setopt(pycurl.HTTPHEADER, ['Authorization: Bearer YOUR API TOKEN'])
c.perform()

POST

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import pycurl
import json

options = {'thought': 'Python test', 'private': 1}

c = pycurl.Curl()
c.setopt(pycurl.URL, 'https://partner.path.com/1/moment/thought')
c.setopt(pycurl.HTTPHEADER, ['Authorization: Bearer YOUR API TOKEN', 'Content-Type: application/json'])
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, json.dumps(options))
c.perform()

Ruby

GET

#!/usr/local/bin/ruby
# encoding utf-8
print "Content-Type: text/html\n\n";

require 'faraday'
require 'json'

conn = Faraday::Connection.new(url: 'https://partner.path.com') do |builder|
  builder.use Faraday::Request::UrlEncoded
   builder.use Faraday::Response::Logger
  builder.use Faraday::Adapter::NetHttp
end

response = conn.get do |request|
  request.url '/1/user/self'
  request.headers = {'Authorization' => 'Bearer YOUR API TOKEN'}
end

json = JSON.parser.new(response.body)
p json.parse

POST

#!/usr/local/bin/ruby
# encoding utf-8
print "Content-Type: application/json\n\n";

require 'faraday'
require 'json'

options = {'thought' => 'Ruby Test', 'private' => 1}

conn = Faraday::Connection.new(url: 'https://partner.path.com') do |builder|
  builder.use Faraday::Request::UrlEncoded
  builder.use Faraday::Response::Logger
  builder.use Faraday::Adapter::NetHttp
end

response = conn.post do |request|
  request.url '/1/moment/thought'
  request.headers = {
    'Authorization' => 'Bearer YOUR API TOKEN',
    'Content-Type' => 'application/json'
  }
  request.body = JSON.generate(options)
end

json = JSON.parser.new(response.body)
p json.parse