Hatena::ブログ(Diary)

ばぐとらぶごる このページをアンテナに追加 RSSフィード

2017-01-18

[]Bluetooth接続のデバイスが勝手に切断される事象の解消方法

最近マウスをMicrosoft Bluetooth Mobile Mouse 3600に変えました。

Bluetooth 4.x(BLE)の超低消費電力の恩恵か、電池の持ちも割と良く、またノートPCのUSBポートを占有しなくなったのでゴキゲンです。

ただ不満が一つ。1時間ほど無操作で放置するとマウスが動かなくなる問題が。

おおかたUSBの省電力機能のせいだろうと思い、下記の手順を試し解決しました。

解消方法1

問題は解決したいが、省電力機能を全てOFFにはしたくない!というエコな方やモバイルな方向け。めんどくさい方。

デバイスマネージャを開き、Bluetoothドングルを探し、選択

f:id:ponapalt:20170118085124p:image

メーカー名やチップの型番らしきものが書いてあるものが対象です。

今回設定したのはBroadcom製ですが、別マシンでは「インテル ワイヤレス Bluetooth」などとなっていました。

Microsoft Bluetooth Enumeratorとか、汎用属性サービスとか、またBluetooth経由で接続済みのデバイスも入っていますが、それらは無視しましょう。

選択した状態のまま、表示をデバイス(接続別)に切り替える

f:id:ponapalt:20170118085125p:image

問題のデバイスがどのようにつながっているかを調べます。

Bluetoothの場合はたとえ内蔵であってもUSB経由のパターンが多いようです。*1

"USB Host"とか"USBホスト"とか"UART Controller"とか書いてあるデバイスまでツリーを遡り、それぞれ全部についてプロパティを開く

f:id:ponapalt:20170118085126p:image

Bluetoothドングル自身と、根元のUSBホスト/UARTコントローラに至るまでにつながるまでのデバイス全部について、右クリックしてプロパティを開いてください。

どこで止めればいいか分からないなら、とにかく木のように分岐して表示されるデバイスの根元に至るまで全部を対象とし、そのうち「電源の管理」があるもの全てについて設定を繰り返してください。

今回はUSB Hubと本体、合計5つが対象でした。めんどくさい…

「電源の管理」タブの「電力の節約のために〜」をOFFする

f:id:ponapalt:20170118085127p:image

この作業を上の手順で見つけ出したデバイス全てで繰り返してください。

Q.なんで根元まで全部繰り返さないと駄目なの?

A.Bluetoothデバイスの省電力設定を切っただけだと問題は再現しました。根元までたぐらないといけないんじゃないかなと思い上記の手順で解決しました。

根元まで手繰って設定していない人のもとで、勝手に切断される事象が再現した報告もありますので、全部やらないとうまく解消しないのではないかと思います。

Q.ウチのはUSB経由じゃないんだけど?

A.Serial Bus UART Controllerとかいうものの下にぶらさがっていることもあるようです。

やることは同じなので、根元の親デバイスっぽい何かに至るまで全部この手順を繰り返してください。

解消方法2

とりあえず簡単な手順で解決したい方向け。かんたんな方。

といっても、書くのが面倒なので下記からぐぐってください。

https://www.google.co.jp/search?lr=lang_ja&q=USB%E3%81%AE%E3%82%BB%E3%83%AC%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%82%B5%E3%82%B9%E3%83%9A%E3%83%B3%E3%83%89%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B

一言で書くと「USBのセレクティブサスペンド機能を全停止」です。

全域にわたって省電力機能を止めてしまうのはなんだか微妙な気もしますが、確実ではあります。

応用

今回Bluetoothマウスの問題解消がメインでしたが、他のBluetooth接続デバイスや(キーボードとかスピーカーとか)、他にもUSB接続のデバイスすべてで(もしかしたら他のデバイスも)同様の手順が使えると思います。

マウスやキーボードがつながっているなら、省電力機能を自動でOFFにしてくれれば良い気もしますが、このへんは実装の難しさ等あるでしょうね。仕方ない。

*1:USBじゃない場合もありますがやることはおおむね同じです

2016-12-25

[]SSP音声認識

本記事は 伺か Advent Calendar 2016 の25日の記事です

まえふり

メリークルシミマス!(風邪の残りに苦しみながら)

本日、SSPの実験版として、2.3.99 Test8 をリリースしました。

下記からダウンロードしてください。

http://ssp.shillest.net/archive/ssp_2_3_99f_test8.exe

クリスマスに何やってんだとお思いの方。あなたは正しい。

わざわざテスト版まで出して何をしたかったのかと申し上げますと…

音声認識

今更です。Windowsでさえコルタナさんと呼びかければ答える今時にコレがテーマなわけです。

しかもずいぶん前にMicCom/かしこが出たのに何やってんだと。あの時音声認識はすでに実現したではないかと。

そう、確かに自由文は送れるようになりました。

しかし、同時に使ってみてこう感じたのではないでしょうか。「何か違う」と。

そう!我々は!ゴーストに言うことを聞いてほしいのであって、音声認識技術にハマりたいわけではないのです!

というわけで、ゴーストに言うことを聞いてもらいましょう。

使い方

1

2.3.99 Test8をダウンロードします。

実験版なのでとてもバグいです。普段とは別のところに置きましょう。

2

マイク類をつけてください。内蔵しているなら問題ありません。

3

Windows Vista以降では標準装備されている音声認識機能を使います。

コントロールパネル -> 音声認識 を開いて、正常に動くようセットアップを済ませておいてください。

認識エンジンが日本語用かも確認しておいてください。(設定項目は「高度な音声オプション」にあるかもしれません)

4

テスト版を起動して、 右クリックメニュー→音声認識 を開いてください。

f:id:ponapalt:20161225185217p:image

何か適当に喋ってみて、左下のゲージが振れるかどうか確認してください。

5

誰に聞いてもらうか決めないといけません。

名前を呼んでみましょう。

「会話相手」欄が埋まったら成功です。

同時にメニューが開く場合が多いと思います。こんな感じです。

f:id:ponapalt:20161225185420p:image

6

誰に喋るか決まれば、次はお願いしてみましょう。

メニュー上に表示されているすべての文字列が対象になります。

上のサンプルだと「なんか話して」がいちばん手軽でしょうか?……聞いてくれました。

f:id:ponapalt:20161225190003p:image

7

このように「誰に」「何を」お願いするかを発声すると反応します。

「何を」は現在表示中のアンカー/メニューが対象になります。

実は実験的に「ゴースト切り替え」「バルーン切り替え」「シェル切り替え」などと言うと特殊反応するらしい……?

必要無くなったら「音声認識」パレットを閉じてください。

結論

やっぱり声で反応するとテンション上がる。

以上です。

2015-12-25

[]新イベントOnHourTimeSignalについて

※本記事は伺か Advent Calendar 2015の12/25の記事です。

新イベント "OnHourTimeSignal"

SSP 2.3.71で新イベント "OnHourTimeSignal" を実装しました。

詳しくはこちら↓~

http://ssp.shillest.net/ukadoc/manual/list_shiori_event.html#OnHourTimeSignal

しかし、よく見たらReference群はOnSecond/MinuteChangeと同じだし、わざわざ新イベント名をつける意味って何なの?という疑問が間違いなく出てくると思います。

今回はこのイベント新設の狙いと、今後の展開についてです。

実装目的

OnSecond/MinuteChangeの説明をよく見ると「喋れないときはNOTIFYで通知され、トークは無視される」という重要な記述があります。

この部分が大事で、今までの時報処理ではたいてい「時」が前から数値が変わったらトークとか、そういう簡易的な実装だと思いますが、その場合、最小化されていたり、passivemodeだったり、そもそも前のトークを喋っている最中だったりと、この条件設定でトークが無視される機会はたくさんあります。

それならOnSecond/MinuteChange自体をトーク可能なタイミングにずらして通知すれば良いのではないか、という案も出てきますが、時刻をきちんと通知する定期処理イベントとしての役割が失われるので、できれば避けたいところです。

結局ゴースト内部で「トークできないフラグが外れるまでトークを保留してから処理」する実装で今までなんとかしてきたのですが、これが処理のフラグ管理が面倒で…

「本体側でどうせフラグ持ってるんだからなんとかそのへんよしなにやれよ!時報だけでなんでオオゲサな処理が要るねん!」ということで、このイベント実装となりました。*1

応用

単純な時報の簡易実装目的だけではなく、日付が重要になる処理をしているゴーストでの確実な日付変更イベントなどに応用できると思います。

今後実装要望の状況によっては、日付変更専用イベントや、?時30分用も作ったほうがいいのかもしれませんが、イベント名をいっぱい作りまくると仕様に埋もれてしまいそうなので、とりあえず今はこのくらいで。*2

意見ください

他にも「今でも実装できることはできるけどちゃんと作るのは超面倒」なものがあれば、本体側の実装を検討するので、今できるからいいや…と投げるのではなく、思いついたらBTSへ。

http://ssp.shillest.net/bts/guest.cgi?project=ssp&action=top

*1:「時報しゃべらないのでSSPのバグでは」という報告が複数上がってついに面倒になったからという本音は秘密である

*2:On30MinTimeSignalだのOn15MinTimeSignalだのOnDateTimeSignalだの乱立したら大惨事であります

2015-04-02

[]RouterBOARD RB750GLでやらかした時のメモ

RouterBOARD RB750GLでやらかした恥ずかしいメモ類。

#1 パケットロス祭り→MTU/MRUの設定

フレッツ光ネクストのMTUは1454。明示的に設定しないと色々悲惨なことになる。RouterOS初心者が最初につまづく定番らしい。

Interfacesの該当設定を開けて、General内のMax MTU/MRUを両方とも1454に設定しよう。下記の上のほう。

http://blog.livedoor.jp/vigonetlabs/archives/1011870605.html

#2 ファームウエア更新は手動でやろう

自動(System->Packages / Check for Update)だと時々トラブるらしい。ダウンロード完了前に再起動がかかるバグがある時があったとかなんとか…

WinBoxで接続して、Upgrade Package (NPK) を手動でダウンロードし、WinBoxのウインドウ内にドラッグ&ドロップするとアップロードが始まる。あとはSystem->Rebootで再起動するだけ。

#3 Firewall設定をしないと外からいじれるよ

System -> Passwordでパスワード保護するのは当たり前として…

下記の下のほうを見てFirewallを設定し、必ず外から管理用ポートへのアクセスをブロックしよう。

http://blog.livedoor.jp/vigonetlabs/archives/1011870605.html

#4 設定ミスでやらかした→ボタンでリセットする前にNeighbourを試してみよう

http://www.mikrotik.com/download

ダウンロードリスト内のNeighbour。これ何やねん?

→設定ミスでLayer4(TCP/UDP)レベルでアクセス不能になった時に、Layer2(MACアドレス指定)でTelnetできるツール。とりあえずリセットする前にダメ元で試してみよう。

RouterBOARD直下にWindows機をつなぎ、NeighborViewerを実行すると、RouterBOARDのMAC Addressが出てくるので、Mac Telnetボタンでログインできる。

または、MACアドレス直打ち(MAC Telnet to...)も可。

#5 MNDP無効化

念のため、外向きのインターフェース上でのデバイス探索を無効化しておく。

IP->Neighbor の Discovery Interfaces 内の外側に向いているInterface(PPPoEなど含む)を開き、Disableで無効化。

2014-12-25

[]SSP 2.3.53〜54の更新内容について

この記事は、伺か Advent Calendar 2014の12/25担当です。

2.3.53〜54にかけて、いくつか重要部の更新を行いました。

内容はものすごい地味なのが1つ、ものすごい破廉恥なのが1つです。

地味編:SERIKO描画仕様の変更

f:id:ponapalt:20141224222352p:image

上の画像のように、アニメーション指定の中から、複数のelement指定のあるsurface番号を呼び出した場合の挙動がまともになりました。

今までもoverlayだけならきちんと動いていましたが、それ以外でも「真っ当な」結果を生むようになりました。

以上です。

…いや、この「真っ当な」というのが曲者です。

仕組みは非常に単純で、上の例でいけばsurface101内のelementをあらかじめ背景が透明な画像に対して指定通り全部合成しておき、その合成結果の画像をsurface0の着せ替え指定でinterpolate指定で合成しています。

今まではelementを1つ1つ毎回合成していたので、overlay指定以外でこれをやると、なかなか意図しない怪しい結果になってしまっていました。

この変更のメリット
  • シェル画像を各部品ごとにバラバラに用意しておき、部品ごとに合成していく自由度の高いシェルを構築可能
  • 合成結果は内部でキャッシュされているので、複雑にelementまみれな定義でも合成コストは1回のみ(高速になる)
    • 上記の通りにアニメーションで使わなくても、element指定が複雑なシェルはすべてこのキャッシュの対象になるので、どれだけ超ド変態な定義を書いても合成コストがほとんどかからなくなります。
デメリット
  • ちょっとメモリ消費が増える
  • もしかしたらすごく怪しく複雑な合成処理をしている既存ゴーストに影響があるかも

破廉恥編:タッチパネルでホイールイベントを起こせるようになった

これの何が重要なのか。

マウスホイールでぐりぐりやるとスカートがめくれるゴーストさんを、タッチパネルで直接指を使ってめくれない!!!!!

こんな事態は許せないので、マウスジェスチャ機能で上または下のジェスチャを行った場合にゴーストがジェスチャイベントに反応しない場合は、タッチパネル上からの操作に限り、ホイールイベントを内部で起こすことにしました。

SSP上のマウスジェスチャは右ドラッグですが、これはタッチパネル上でも簡単に起こせます。

目標位置を1本指でタッチ、そのまま1秒ぐらい動かさないで居ると、下の画像のように□マークが出ます。

f:id:ponapalt:20141224222353p:image

マークが出たら、指を上に動かしてください。

めくれます。

以上です。

そのほか編:SSPヘルプがWeb上に移行しました。

Windowsのヘルプシステムにまともに使えるのがなくなったのも理由ですが、ヘルプをWeb上に移行した上で、ukadocプロジェクトに丸投げしました。これはひどい。

ここからも見られます→ http://ssp.shillest.net/ukadoc/ssphelp/

おおむね もっしょくしさん奈良阪さん あたりを主としてukadocのコミッター担当さんが超がんばってくれたようです。ありがとうございます。

私はだいたい見てただけです。これは超ひどい。

ukadocの本来のおしごと、まともな仕様書の編集についてもよろしくです。

2014-05-17

[]里々のユリウス日計算スクリプト(修正版)

id:Umihotaru:20081226 のスクリプトが整備班版里々で怪しい動きをしていたので、下記の通り修正です。

@ユリウス日
(calc,
365*(ユリウス日要素)+(ユリウス日要素)/4
+3059*((if,(A1)>2,−2,10)+(A1))/100
+(ユリウス日要素)/400
−(ユリウス日要素)/100
+(A2)+1721089)

@ユリウス日要素
((A0)−(if,(A1)>2,0,1))

修正箇所は1箇所だけで「@ユリウス日要素」の部分です。

A1パラメータ(年月日の月)が2以上の場合、旧版では、

  • ((A0)(if,(A1)>2,,-1))
  • ((A0)(if,5>2,,-1))
  • ((A0))
  • (2014)
  • \s[2014]

というふうに、数値のみを括弧で再評価した結果、\sタグに化けて以降の演算を壊してしまう問題がありました。

修正分では、ダミーのゼロを入れているため、

  • ((A0)−(if,(A1)>2,0,1))
  • ((A0)−(if,5>2,0,1))
  • (2014−0)
  • 2014

というふうに数値として扱われ、以降の演算で異常は起きなくなります。

里々改修版の互換バグか記述の不具合か怪しいところですけど、とりあえず修正まで。