ぽつんぽつんと書くブログ

飽きっぽいので、我慢せずに飽きることを許容しながら、ぽつんぽつんと生まれてくるブログ

紙パックのまま作るお手軽飲むヨーグルト

 紙パックのまま簡単にヨーグルトが作れるので、ご紹介。

  1. 1リットルの紙パック牛乳と100ml程度のブルガリア飲むヨーグルトを用意する。
  2. 紙パックをあけて、100ml程度の牛乳を出す(飲んでしまいましょう)
  3. 紙パックごと牛乳を電子レンジに入れ、600Wで3分30秒加熱する(我が家の電子レンジの場合、頭の部分を潰さないと入りませんが、潰しても影響ありません)。
  4. 紙パックの牛乳に、飲むヨーグルトを50mlから100ml程度注ぎ込む。
  5. 紙パックの注ぎ口をつまんで、激しく振る。
  6. 電子レンジのヨーグルトモードや発酵モードで、90分間加熱する(ヨーグルトメーカーを使用する場合は説明書に従ってください)。
  7. 電子レンジが止まってもそのまま放置します(我が家の場合、21時頃に電子レンジを開始して、翌朝まで放置しています)。
  8. パックの中身を嗅いでみて、ヨーグルト臭がすればOKです。
  9. 再度激しく振るすると、無糖の飲むヨーグルトの出来上がり。甘みを加えるため、フルーツ酢を少量パックの中に注いで激しく振るのをおすすめします。
  10. 完成したヨーグルトをパックのまま冷蔵庫で冷やしたら出来上がり。

Neo Smartpen2を使用すると自動的にアプリを起動する方法

 Neosmartpen2を購入してみた。

 とても便利だし、認識に不満はないけれど、あえてNeosmartpen2を使っている状況であるから、たいていはスマートフォンを取り出しにくい状況にあることが多いので、その後同期し忘れることが多い。

 

 そこでTaskerを使って、スマートペンの電源が入ったら専用アプリを自動で起動するようにしてみた。

 

イベント
f:id:ciaagent007:20180223004025j:image

 

割り当てる処理
f:id:ciaagent007:20180223004046j:image

PebbleをTaskerで操る(AutoPebble)

Taskerに有料のサードパーティープラグインであるAutoPebbleを追加して、オリジナルアプリもどきを作ってみたい。
ただし、残念なことに、自分のPebbleTime上では、カーソルなどの反転がうまく表示されず「黒塗りつぶし」になってしまった。自分専用のアプリなので気にならないが、潔癖症の人は避けた方がよいかもしれない。
なお、以下は通勤の合間にヘルプを読んででっち上げたコードであるから、本来の使い方を逸脱していたり、もっと簡単な方法もあるかもしれないのでご留意願いたい。

まず、AutoPebbleでできる「主な」ことを簡単におさらいしたい。

  • 右側の上中下ボタンで選択する3項目メニュー(長押しとダブルクリックやシェイクも取得できる)
  • その亜種である通知画面。実質的には3項目メニューと同じ。
  • 右側の上下ボタンで選択肢を切り替え、中央ボタンで決定する複数項目メニュー
  • Pebble側のAutoPebbleアプリが起動したことで発生するイベント
  • Pebble側で上記の選択ボタンが押された際に発生するイベント(Commandという変数で押されたボタンを識別できる)


この仕様から導かれるおよその戦略は以下の通り。

  • Pebble側でAutoPebbleが起動したらメインメニューを表示する
  • ボタン押下時に発生するイベントで、変数"Command"で返されたTaskerのTaskを実行する
  • サブメニュー用のTaskを作り階層構造にもする。

さらに応用として

  • 自宅Wifiから離脱した際に発生するイベントで、Pebbleに「消灯の確認」を通知し、決定ボタンが押されたときはIRKitから消灯するリモコン信号を発する。
  • 自宅Wifiに接続した際に発生するイベントで、Pebbleに「点灯の確認」を通知し、決定ボタンが押されたときはIRKitから点灯するリモコン信号を発する。

Pebble側でAutoPebbleを起動時にメニューを表示するプロフィール
3項目メニューを表示し、上ボタンを押すとリモコンという別のサブメニューに飛ぶ。中と下ボタンには今のところ割り当てなし。

Profile: Pebbleでアプリを開いた (186)
	Restore: no
	State: AutoPebble App [ Configuration:Watch App Opened: true
Pebble Connected: false
PebbleDisconnected: false
Media Button: false
Media Button Previous: false
Media Button Next: false ]
Enter: Pebbleメインメニュー (189)
	A1: AutoPebble List [ Configuration:Full Screen: false
Header: Taskerメニュー
Labels: リモコン
Actions: task:リモコン
Last Line Height Default: false
Remember Position: false
Motion Action: task:リモコン
No Prefix if Command: false
Do Not Disturb: false
Clear History: false
Open Phone App: false
Save Scren: false
Don't Send Screen: false
Go Back: false
Go Back Multi: false Timeout (Seconds):120 ] 


ボタン押下時の発生イベントで、Commandに従いTaskerのTaskを実行するイベント
このプロフィールを作ることで、冒頭にtask:を付してあるCommandを、タスクとして解釈するようになる。

Profile: Pebble:タスク呼び出し (195)
	Event: AutoPebble [ Configuration:Command Filter: task:
Case Insensitive: false
Exact: false
Case Insensitive: false ]
Enter: Task呼び出し (194)
	A1: Variable Set [ Name:%command To:%apmessage Recurse Variables:Off Do Maths:Off Append:Off ] 
	A2: Variable Search Replace [ Variable:%command Search:task: Ignore Case:Off Multi-Line:Off One Match Only:Off Store Matches In:%command Replace Matches:On Replace With: ] 
	A3: Flash [ Text:%command を実行 Long:Off ] 
	A4: Perform Task [ Name:%command Priority:%priority Parameter 1 (%par1): Parameter 2 (%par2): Return Value Variable: Stop:Off ] 

サブメニューのタスク
複数項目メニューである。「外出就寝」というタスクを用意しておき、それを呼び出している。ちなみに、IRKitから、すべての家電に対して電源OFFのリモコン信号を発するタスクである。詳細はIRKitの記事を参照されたい。

リモコン (192)
	A1: AutoPebble List [ Configuration:Full Screen: false
Header: リモコン
Labels: 外出就寝,帰宅,照明
Actions: task:外出就寝,task:帰宅,task:時間に応じた照明をつける
Last Line Height Default: false
Remember Position: false
Title Font: Gothic 14 Bold
Text Font: Gothic 18
Motion Action: task:Close
No Prefix if Command: false
Do Not Disturb: false
Light Mode: Turn On Briefly
Clear History: false
Open Phone App: false
Save Scren: false
Don't Send Screen: false
Go Back: false
Go Back Multi: false Timeout (Seconds):120 ] 

応用編
 ここから先は別稿に譲る。

今更ながらIRKitを買った

すでに枯れた商品なのかもしれないが、IRKitを買ってみた。 残念なことにAndroid用のアプリはあまり作りこまれておらず、登録ボタン数に厳しい制限があり、タイマー機能などもないためそのままでは活用は難しい。 そこで、Taskerからも使えるように奮闘してみた。途中JavaScriptを使っているが、ほぼ初めて書いたものなのでその辺は割り引いて読んでほしい(あちこちからのコピペなので、随所に痕跡があるかと思いますがご容赦を)。

まず、ほかでも使いまわせるようリモコンデータ部を分離した。本当はjsonとしてネット上に置くのがいいのかもしれないが、ここでは単なるjsファイルとしてローカルに置くことにした。

/sdcard/Download/Javascript/IRKitCommand.js *1

var text =`{
    "照明勉強": {"format":"raw","freq":38,"data":[123,345,678]},
    "照明普段":{"format":"raw","freq":38,"data":[333,444,555 666]},
    "照明シアター": {"format":"raw","freq":38,"data":[98 76,54 32,2]}
}` 

setLocal("irjson" ,text);

このパターンで好きなだけ繰り返し追加できる。最後だけ「,」はなしになるので注意。なお、リモコンコードはダミー。 コードの取得はhttp://d.hatena.ne.jp/tsukaban/20150828/p1を参考にした。 このコードをTaskerから呼び出すとローカル変数(配列)"irjson"にリモコンデータが格納される。

続いてリモコン発信のコードはこちら。ローカル変数"irjson"の中にリモコンコードが格納された状態で呼び出す必要がある。

/sdcard/Download/Javascript/IRKitSendIR.js

var IRs;
var text;

text = local("irjson");
IRs = JSON.parse(text);

var deviceid = "xxxxxxxxxxx";
var clientkey = "xxxxxxxxxxx";
var msg = IRs[sendir];

function send(message){
  var xhr = new XMLHttpRequest();
  xhr.open("post", "https://api.getirkit.com/1/messages", false);
  var form = new FormData();
  form.append("deviceid", deviceid);
  form.append("clientkey", clientkey);
  form.append("message", JSON.stringify(message));
  xhr.send(form);
}
 
function main(){
  send(msg);
}
 
try{
  main();
}
catch(e){
  flash(e.message);
}

こちらもidやkeyの取得はhttp://d.hatena.ne.jp/tsukaban/20150828/p1を参考にした。

なお、参考までに自分の場合、INHOMEというグローバル変数で、自宅にいるかどうかの状態管理をしているので、以下のような分岐をしている。コード中の「192.168.1.xxx」の部分は、自身のIRkitのIPアドレスを指定する。 /sdcard/Download/Javascript/IRKitSendIR.js (自分用)

var IRs;
var text;

text = local("irjson");
IRs = JSON.parse(text);

var deviceid = "xxxxxxxxxxx";
var clientkey = "xxxxxxxxxxx";
var msg = IRs[sendir];

function send(message){
  var xhr = new XMLHttpRequest();
  if(global("INHOME") == 1){
    xhr.open('post','http://192.168.1.xxx/messages',false);
    xhr.send(JSON.stringify(message));
  }else{
    xhr.open("post", "https://api.getirkit.com/1/messages", false);
    var form = new FormData();
    form.append("deviceid", deviceid);
    form.append("clientkey", clientkey);
    form.append("message", JSON.stringify(message));
    xhr.send(form);
  }
}
 
function main(){
  send(msg);
}
 
try{
  main();
}
catch(e){
  flash(e.message);
}

この2つのスクリプトをTaskerから呼び出して使う。

具体的にはこんな感じ。

リモコン送信 (165)
    Run Both Together
    A1: Vibrate [ Time:50 ] 
    A2: Variable Set [ Name:%sendir To:%par1 Recurse Variables:Off Do Maths:Off Append:Off ] 
    A3: JavaScript [ Path:Download/Javascript/IRKitCommand.js Libraries: Auto Exit:On Timeout (Seconds):45 ] 
    A4: JavaScript [ Path:Download/Javascript/IRKitSendIR.js Libraries: Auto Exit:On Timeout (Seconds):45 ] 
    A5: Flash [ Text:%sendir を送信しました。 Long:Off ] 
    A6: [X] Notify [ Title:%sendir を送信しました。 Text: Icon:hd_aaa_ext_home Number:0 Permanent:Off Priority:3 ] 

このリモコン送信というタスクに引数をひとつつけて呼び出すとリモコンが送信される。

昼の電気 (175)
    A1: Perform Task [ Name:リモコン送信 Priority:%priority Parameter 1 (%par1):ペンダントON Parameter 2 (%par2): Return Value Variable: Stop:Off ] 
    A2: Perform Task [ Name:リモコン送信 Priority:%priority Parameter 1 (%par1):照明勉強 Parameter 2 (%par2): Return Value Variable: Stop:Off ] 

これで、パナソニック製の照明にある「勉強」というモードになる。

複数の送信コマンドを並べてバッチ処理も可能だし、条件分岐もできる。

*1:このようなおかしなパスなのは、Syncという同期ソフトでPCとフォルダ共有しているため。リモコンコードの追加削除はPC側でやった方が楽なので。

Pebbleでポモドーロタイマーを

勤務時間中は毎時13,27,43,57分に携帯をバイブさせ、ポモドーロタイマー兼次の時間帯のアポイントリマインダーとして使ってきた。

しかし携帯バイブは気が付きにくく、また、音が大きいため、トイレの個室や会議中に鳴ると、少し恥ずかしかった。

そこで、ほぼ無音なのにほぼ確実に気がつくPebbleを、Taskerでポモドーロタイマー化してみた。

 

Profile: ポモドーロタイマー (32)
Priority: 0
Time: From 8:57午前 every 15m Till 5:15午後
Day: Mon, Tue, Wed, Thu or Fri
Enter: ポモドーロバイブ (37)
A1: [X] Vibrate Pattern [ Pattern:0,100,20,100,20,100,20,100 ]
A2: Variable Set [ Name:%now To:%TIME Recurse Variables:Off Do Maths:Off Append:Off ]
A3: Variable Split [ Name:%now Splitter:. Delete Base:On ]
A4: Variable Add [ Name:%now2 Value:3 Wrap Around:0 ]
A5: Variable Add [ Name:%now1 Value:1 Wrap Around:0 ] If [ %now2 > 59 ]
A6: Variable Set [ Name:%now2 To:0 Recurse Variables:Off Do Maths:Off Append:Off ] If [ %now2 > 59 ]
A7: Notify [ Title:%now1 時 %now2 分 になります。 Text: Icon:hd_ab_device_access_time Number:0 Permanent:Off Priority:3 ]
A8: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A9: Notify Cancel [ Title:%now1 時 %now2 分 になります。 Warn Not Exist:Off ]

 

A1はスマホでやっていた時代のものなので無効化している。

 

 

 

今更ながらPebble Timeを買った

敵対的買収を受けた結果、来年以降のサービスの存続が危ぶまれているPebble Timeを、今更ながら買ってみた。

Fwの最新は4.3だが、それにアップデートするとSOSが頻発し、電池消費量もひどかったので、4.2にダウングレードした。そうしたところ、公称通りの電池の持ちになり、SOSも発生しなくなった。しかし、大多数のウォッチフェイスとウォッチアプリが4.3でなければ動作しないことから、そのままではかなりわびしい状況となる。そこで、安定するまで、試行錯誤を繰り返してみた。

 

結論から言うと4.3で安定した。

以下その手順となるが、必ずしもこの手順に再現性があるとも限らないから、期待しないで試すくらいの気持ちで読んでほしい。

 

手順は以下のとおり。

  1. まず、初期化。スマホ側のBlutoothのペアリングを解除し、続いてPebble側で設定画面から初期化する。
  2. スマホ側のPebbleアプリで再接続を試みるとペアリングが始まるので、接続する。
  3. 自動的に4.3へのアップデートが始まるので、しばし待つ。
  4. 完了すると日本語化前の4.3がインストールされた状態となる。
  5. 続いて、スマホ側で4.2のファームウエアを落としておき、ファイラーなどで開き、Pebbleアプリで開く。
  6. 4.2へのバージョンダウンが始まるので、しばし待つ。
  7. akt08.zipのメニュー日本語化版をインストールする。これで、安定した4.2の環境が構築される(4.2で使い続ける場合はここで終わり)。
  8. スマホ側のPebbleアプリの上に表示されている黄色い「!」アイコンをタップし、4.3にアップデートする。
  9. akt08.zipのメニュー「英語」版をインストールする。これで、安定した4.3の環境が構築される。

 

どこが必要でどこが不要なのかの切り分けはできていないが、これで安定した環境となった。どういうわけか、いきなり4.3にして、英語メニュー版の日本語化をしても安定しなかった。どちらも試してみて、上の方法でだけ安定した方がいたらコメントを残してほしい(返事できないかもしれないけど)。

 

上記のとおり、日本語化にはakt08.zipを利用した。09以降は、PebbleTimeよりメモリーの少ないPebble2の為にフォントの数が減らされているので意図的に古いバージョンを当てた。 

この状態で安定しているので、SOSが頻発している方がまだいるならば、参考にしてほしい。

 

WatchFaceは、ビジネス用には天気とカレンダーが表示されているForeCalを、オフ用にはPrismClockのようなカラフルな系統のものやWeatherGraph、Weather Waveのようなお天気マニア的な系統をつかっている。

なお、個人の感想としては、他のスマートウォッチとは違い、あまりリアルな系統のWatchFace(実在するアナログウォッチの盤面を真似たもの)は合わない。暗いし、解像度が低いので、チープな感じが際立つ。

 

アプリも期待していたのだけど、あまり使えそうなものは多くなかった。

  1. GoogleTasks …AndroidのスライドメモProとの相性が良い。タスク管理から、単なるテキスト共有にも使える。
  2. Mini Map、SimpleMap、PalMap …地図アプリ。少しずつ機能が違うので、どれが合うかは好みによる。
  3. Wikipedia …日本語音声認識がごにょごにょ必須なため、それ無しだとランダム表示か、周辺施設検索くらいしか使いみちがない。それなのに、表示してみると本文がきちんと表示できるものは一部にかぎられており、実に悲しい。
  4. Timeline …標準のスケジュール表示機能+α。ただし、アルファの部分はうまく活用できていない。でも、スケジュール表示機能だけで見ても、秀逸。

 

もっぱら「スマートな機能」については、Androidの通知転送と、日本語では定型文だけながらLINE等への返信くらいしか使いこなせていない。

なお、通知を活用するため、Android側にもともと入れていたTaskerを利用して、いくつか専用のマクロを組んである。

AutoAppシリーズのAutoPebbleを入れたが、かなり細かな制御ができるため、擬似アプリ的なものも構築可能だ。

例えば、オリジナルのメニューやPebble通知から選択してIRKitを制御することも可能なので、自宅のWi-fiを掴んだ時にPebbleに通知を飛ばし、選択ボタン(右中央ボタン)を押すと、自宅の照明やエアコンがつくような動作を仕込んだ。これでTaskerだけで大抵のことができる(ウォッチに画像が飛ばせないのだけが残念)。

 

こんな感じにシンプル(?)に使っている。

ナビと連携できればよかったがそれはできなかった。GoogleマップYahoo!地図のナビ通知は特殊なようで、Pebbleアプリをはじめ、TaskerやAuto notificationでは通知をつかめないためPebbleに通知を転送できないのだ。

いくつかナビ的アプリもあるようだが、細かな制約があり、気持ちよく使えるものがない。それだけは残念に思う。

 

 

 

 

 

 

Boox T68のおすすめ設定+Tips

 端的に言えば、凄まじく遅くて、タップ位置が1センチもずれるこの端末をどのようにしたら、マシに使えるか、というTipsだ。

A2 Modeを使え

 Booxには高速描画モードであるA2 Modeというのが備わっている。
 挙動から推測するに、白黒二値での描画(FAXみたいな感じ)にし、かつ、リフレッシュの頻度を落とすことで動作を高速化しているようだ。

 画面右上にある更新マーク(丸い矢印)がA2 Modeのボタンである。

  1. 標準(16階調グレースケール)=A2 Mode解除時
  2. A2 Mode Quality first
  3. A2 Mode Performance first

の三種類のモードがある。

 下2つについては、体感できるほどの差はない。少なくとも私には。
 白黒二値になるので読書等には使えないが、ファイラーやテキスト編集時には重宝する。
 特に、Google日本語入力が文字を取りこぼすときは、A2 Modeにすると改善することが多い。

物理キーによる独自ショートカットキーをマスターしろ

  • Menuキー長押しで強制リフレッシュ。特にA2 Modeの時に一瞬だけ標準(16階調)に戻す時に重宝する。また、「あれ?ボタンを押したけど、真っ白になって先に進まないな。」という時に押すと画面が現れたりする。
  • 戻るキー又は決定キーの長押し。フロントライトのON/OFFを切り替えられる。
  • 上下左右キーはカーソルキー、決定キーはEnter、ページ前後はPageUP/DOWNキーに割り当てられているようだ。

 とにかくタップ位置がずれることによるストレスが最も辛いから、物理キーを多用することも一計である。
 例えば、「メニュー>下下>決定」といった操作である。

壁紙は白にしろ

 黒系にするとスクロール時の残像がひどい。

Androidの設定画面でいじくれ

 デフォルトのホームアプリであるOnyx Launcherから呼び出せる設定はごく一部である。
 好きなホームアプリを入れて、そこから設定を呼び出せばAndroid本来の設定画面を呼び出すことができる。

Wifiは画面OFFをでも通信する

 好みにもよるがこのようにしておかないと電子書籍のダウンロードでいらいらするように思う。

BluetoothはOFF

 これも好みだ。何故か自分の環境ではBluetoothでのテザリングはできず、キーボード・マウスも使用しないので常時OFFにしている。ポメラを志向している人とは袂を分かつことになる。さらば。

ディスプレイ設定は独自になっている

  • 操作が行われなければ3分経過で画面OFF
  • 15分操作がなければ電源OFF(スリープではない)
  • 15分通信がなければWifiを自動OFF

といった設定ができる。私の場合は、この機能の一部を利用せずTaskerで実現している。好みだろう。
 画面がONになった時にWifiをONにする機能はないようである(これがきっかけでTaskerに移行した)。

 なお、3つ目のWifiをOFFをにする機能については、「never」にしても切れるという不具合があるらしく、あちこちでクレームの書き込みを見かけた。その場合は、60 minutesで運用するしかないだろう。

ユーザー補助で字を大きくしろ

 大きい文字サイズにすることで、タップ位置がずれてもなんとかなる。
 ついでに押し続ける時間を「中」にした方がいいかもしれない。

開発者向けオプションで

タップを表示にしろ

 押し続ける時間を「中」にするのと合わせ技で、タップ位置をズリズリっと修正することができる。
 副作用として、画面にタップ位置の残像が残って汚らしい(指紋がついたような感じになる)。

GPUレンダリングを使用にする?

 一応やっている。

バックグラウンドプロセスの上限を低くする?

 やってはいないのだが、あまりに遅いようならメモリ解放目的でこのような設定もありうるかもしれない。