2017年10月01日

Bloggerもそのうち廃止になるのだろうか

正直なことを言って、GoogleはBloggerやSiteに力を入れていない、
というより、もはや廃止対象になりつつあるのではないかと思うことがあります。

ひさびさにBloggerをスマホから更新しようとして、昔使っていたBlogger公式アプリがなくなっていたり、
公式設定画面をiPadから操作してると意味不明な箇所で落ちたり、
そもそもBloggerもSiteもスマホからの更新を考えていない雰囲気があったりと。

メインでサポートする気があるなら絶対に落とさないであろう箇所は放って置かれていますし、
サービスの改善も長いこと行われていない(使いにくくはなっていっている)ことからして、
もう先はそんなに長くないのかもしれません。

というわけで、WordPress等への移行も視野に入れておく必要があるのかもしれませんね。


追記

bloggerが突如スパム判定されてロックアウトされるという事象も、
わりかし頻繁に起きている様子。
根強く申請すれば解除されるそうだが... それもそれで恐ろしいなぁ...
posted by gpsnmeajp at 02:37| Comment(0) | TrackBack(0) | 未分類

2017年09月30日

忍者アナライズが残念

アクセス解析ツールとして何がいいのか、いまいち定まっていない。
Google アナリティクスは、広告の効果の解析等に特化してるのかごちゃごちゃして見づらい。
それで、非公式WikiにはGoogleアナリティクスと、忍者アナライズを使っている。

忍者アナライズは、昔からWebを使っている人ならお馴染みの忍者ツールズの奴だ。
昔ながらのアクセス解析もあるが、忍者アナライズの方は割と近代的な作りになっている。

のだが、困ったことにSSLに対応していない。
SSLと通常のコンテンツを混ぜるのはだいぶん昔にダメになったらしく、SSLオンリーで統一しないといけないらしい。

wikiは暗号化なししかサポートしていないので、なんの問題もなく動いており、
忍者アナライズ自体もSSLに対応していそうな「雰囲気は」していたので油断していたが、
実際にSSLページに置くとエラーを吐く。

なにかと覗いてみると、HTTPSとして忍者ツールズにアクセスしてるまではいいのだが、
サーバー側が応答しないのだ。

んで、FAQを見てみると見事に「動作保証外」との表示が。
というわけで、ブログやサイトでは未だにGoogleアナリティクスオンリーである。

余談だが、SeesaaWikiってGoogleWebマスタと相性が悪く、
認証できないので、検索キーワードがわからない。
辛い。
posted by gpsnmeajp at 20:48| Comment(0) | TrackBack(0) | 未分類

ブログの運用方針も変えようと思う

今まで、Twitterをベースに活動をしてきたので、ブログとサイトの使い分けは割と曖昧であった。

まれに日記的な何かを投下することがあるかもしれない程度で、
正直更新間隔が非常に長かった。

今回、Twitterを仮停止したのに合わせて、日記的なものの役割を、
きちんとブログに担わせようと考えている。

日記はここに。
コードの断片はqiitaに。
成果物はsakuraに。
とそんな感じで。

RSS連携なども設定が終わったので、今後はここの更新をメインにしよう。
もっとも続くかはわからないが。

Blogger用のアプリも入れたので、前よりかは更新しやすくなるのではないかと思う。

今後こんな感じの適当な文が増えるがご承知ください。

ちなみに以前のTwitterみたいなのが見たい人は、
mstdn.jpに来ていただけると今はそんな感じでやってます
posted by gpsnmeajp at 20:23| Comment(0) | TrackBack(0) | 未分類

2017年09月29日

新しいサイトを作りました

新しいサイトを作成しました。
https://sabowl.sakura.ne.jp/gpsnmeajp/

今まで、本ブログやサイトのようにGoogleの無料サイト機能や、
SeesaaWiki、Twitter、Qiitaなどを中心に活動してまいりました。

しかし、特にTwitter周辺含め昨今様々な騒動等もあり、ふと考えを改め、
情報発信の構成を見直すこととしました。

Twitterでのつぶやきは、リアルタイムでの共有や軽い共有はさておき、
長期に渡って参照されるものにはなりえませんし、
運用方針など疑問が多々あり、また技術とは関係ない方面においての
心労も無視できなくなりました。

また、本ブログのサービスBloggerではjavascriptが満足に動作しなかったり、
HTMLに手を入れようとするとかなり面倒なことになりコードが公開しにくかったり、
Google Siteでも同様に、javascriptを走らせるのは非常に面倒、
HTMLはもはや無理なレベルだとか、まあ色々ありまして、

この度、さくらインターネットのレンタルサーバーを借りて
HPスペースを持つことにしました。老舗ですし、有料なので安心感があります。
なにより共有SSLが使えるので、最新のWebUSBやらWebBluetoothやら
Service Workerやらが使えるのが嬉しいところ。
(なんか仕様が古いとか独自とかいう話もありますがとりあえずは支障なさそう)

それにあわせ、メールサーバーもついてきましたので、
メールアドレスも公開させていただきました。

今後の方針ですが、
・FlashAir開発者向け非公式Wikiは継続します。
 誰でも編集できるWikiであることが大切だと思っていますので。
 編集してくださる人が増えることを願っています。

・Qiitaも継続します。細かなコードの公表や、チュートリアル等は
 反響を読みやすく、また書きやすいところが便利です。
 動作デモや、まとまったコードなどはさくらの方に上げる形になるかと思います。

・GoogleSiteは、アクセスが多いのでなんともですが、
 FTLEを残してだんだんと移転する形になるかもしれません。

・本ブログは、コード関係の記事は削除します。
 (そもそもコードがまともに読めなくなっているので)
 Qiitaに移動するか、別途サイトの方にページを作るかは未定ですが、
 内容は(自分のために)残すと思います。

・ニコニコ動画に上げていた動画は、取り下げるかもしれません。
 取り下げた場合は、youtubeか、サイトに置きます。

・youtubeの動画は...多分取り下げないと思います。

・Twitterは未定です。

以上、お読み頂きありがとうございました。
posted by gpsnmeajp at 23:10| Comment(0) | TrackBack(0) | 未分類

2017年07月25日

HP Stream 11-y004tuを購入した

HP Stream 11-y004tu(2016年12月モデル)を購入した。
Celeron N3050搭載の非力なマシン(10年前のCore2Duoに負ける性能)だが、
その価格(3万2千円)に負けて買ってしまった。

Windows PCとしてはポータブックがあるのだが、Linux入れる用のマシンが欲しくなったのだ。
HP Stream 11シリーズは比較的有名で、前々からLinuxを導入した報告が多かった。
同価格帯のasusのE203NAとかなり迷ったのだが、asusのマシンはLinux導入時のトラブル報告が多いので、
Linux初心者の自分には向いていなさそうということでHPを選択した。

で、届いた。


開封した印象としては
・割と本気でおもちゃっぽい
・筐体が軽くて薄くて良い
・通常のACアダプタケーブルの他に、ACアダプタに直結できる
 L字型コンセントアダプタがついているのはかなり好感度が高い。携帯性が高まる
・キーボードは、良くもないが悪くもない。パタパタといった感触
・Windows 10はじめてブック的なものがついているのは初心者にすごく優しい
・タッチパッドになにかの跡が... 製造時のかな?

まず、デフォで入っているWindows 10の方を使ってみた。
・クソ重い。正直使用がきついレベル。ポータブックのほうがまだマシ
・すべてが遅い。使いにくい。
・ポータブックと違って液晶はマトモな方。(超きれいではない)
・One Driveの2年間100GB無料使用権利が紙で同梱されていて、それは良い
・HPの製品登録をすると、さらにDropboxの1年間25GB無料権が手に入るのも良い
・入っているのは1507あたりのかなり古いWindows 10であり、
 即Creators Updateにする必要が(もちろん問題なく終了する)
・ファンレスなのは良い

次に、Ubuntuを導入するついでにBIOS設定に入る。
・普通に64bit UEFI
・HPは自己診断ツールが充実していて良い
・起動時パスワードや、起動順位設定などが普通に設定できるのが素晴らしい
・レガシーBIOSサポートまで入っている(Windows7以前も問題なく入りそう)
・POST delayの設定もできる。素晴らしい。
・当然のようにUSBブートもCDブートも対応
・セキュアブートもオフにできる(次回起動時に確認画面が出る)
・音量キーなどは、デフォだとFn押さずに利用できる
 (つまりF1等のキーが後ろに回っている)が、
 Action Key設定をdisableにすると、通常ファンクションキー有効で、
 Fn押すと音量等の操作になる普通の設定にすることができる。
とても良い。

最後に、Ubuntu 16.04 日本語Remix(64bit)のライブCDで動作確認
・起動順位を設定し直しておけば、なんの問題もなく起動する
・起動は遅いが、起動後はそこそこ軽快に動作する
・カメラ OK
・キーボード OK
・microSD OK
・Wi-Fi OK
・Bluetooth OK
・オーディオ OK
・イヤホン端子 OK
・タッチパッド OK(※)
・モニタクローズでのサスペンド NG
・手動でのサスペンド OK
・サスペンドからの復帰 OK
というわけで、デバイス周りの問題は何も概ね起こらず使用できた。
素直で素晴らしい。

もちろんセットアップ時にもWi-Fiは問題なく使用できている。

※タッチパッドは、2本以上の指で触れると、時折左上や左下に吹っ飛んでいくことがある。
 頻繁には起こらないが、そこそこ起こるので注意。Windows使用時も同様かは不明
 (どうやら、クリックするときに反応するのが原因らしい。クリック時にカーソル操作する側の指を離せば発生しないが...)


結論: Linux入れて使うのに最適。Windowsで使うなら大変な気長さが必要そう


Ubuntu導入後
・タップでクリックする、や、二指でのスクロールは切っておいたほうが良さそう
posted by gpsnmeajp at 21:09| Comment(0) | TrackBack(0) | 未分類

2017年06月24日

最近ちょっとFelicaにハマっている

最近ちょっとFelicaにハマっている。

Felicaで色々するのが流行ったのは2008年ごろだろうか。
当時自分も、Felicalibを使ってIDmを読み込んで認証するプログラムを作った覚えがある。
その時、RC-S330を購入したのも覚えていた。

最近、といっても1年ほど前だろうか。
ふとしたことで、NFC搭載のSDカードを手に入れた。
東芝のアレだ。

当時自分はNFCを読み取れる機材がなく、SDカードも別に不足していなかったので、
戸棚にしまったままになっていた。

3月頃、ふとAndroidアプリ開発をしたくなってNexus5Xを購入していた。
NFC読み取り機能もあることだし、と、免許証や電子マネーの読み取りアプリも入れていた。

それで、ふと先のNFC-SDカードを思い出した。
Nexsus5Xにアプリを入れ読み取ると、ちょっと使いづらいながらも
無事サムネイルとカード名を読めるようになった。

NFC-Type Fなので、PC+PaSoRiでも読めそうだが、公式にはないし、
やっている人も見かけない。

ここでふと思った。ざっと探してもネット上でこのSDカードを解析している人はいない。
しかし、自分は前にFelicalibで少しだがFelicaには触っている。
ちょっと調べれば実は簡単にできるのではないか?と。

実際、このSDカードの仕様とメモリマップは公開されていた。
見た感じ結構単純そうであるし、行けるだろう、と思ったのが罠だった。

詳細はFlashAir開発者向け非公式wikiを参照してほしい。
http://seesaawiki.jp/flashair-dev/d/NFC%3aPC%a4%ab%a4%e9%c6%c9%a4%df%bd%d0%a4%b9
のだが、ここでもかいつまんで説明しよう。

まず、Felicaには現在最低でも2種類ある。
Felica Standard: これは、いわゆるSuica等の普通の高セキュリティなFelicaだ。
 いわゆるカード型Felicaのそれは全部これである。
Felica Lite: これは機能が省略された安価なFelicaで、そのかわり小型省電力。
 もともとNFC用に作られたと言ってもいいもので、ポスターやフィギュア、
 シールや小さなカードなど、小型軽量薄い、そして安いが、
 暗号化機能はごっそり削られ、容量もかなり少ない
 一部では会員証として普通のFelicaと同じカードの形をしていることもある。

で、2008年ごろのFelicaといえば、Felica Standardのことだった。
Felica Liteはあとから出てきたもので、いわゆるNFCはほぼこっちである。

そう、2008年で更新が止まっているFelicalibはFelica Standard用に作られており
一方、NFC SDカードは、NFCの名の通りFelica Liteなのである。

Felica Standardは、かなり複雑な階層構造になっており、
システム→サービス→エリア→データブロックになっている。
”システム”でEdyやSuicaなどが別れ、そのシステムも共有の領域な場合があって
そこはサービスで分ける。(Edyなどは共有領域を使っている)
そして、サービスの中はエリアで別れていて...と言った感じ。
(エリアは8階層まで可能らしい)
なので、ディレクトリ構造になる。
またこれらを扱うために多種多様なコマンドがある。
アクセス手法もランダムや、サイクリック、パースなどあるし、暗号化も様々できる。
トランザクション処理もできる。

一方、Felica Liteは、システムもサービスもエリアもない
ブロックしかない。ブロックしかない。
そのため、ブロックアドレスのマップ、メモリマップで全てが表せる。
さらに、コストカットのためコマンドも削られている。
・ポーリング
・暗号化なし読み取り
・暗号化なし書き込み
しかない。

ただ、互換のためシステムコードは0x88B4(Felica Lite) or 0x12FC(NDEF)で反応し、
サービスも0x0009(読み書き可)と0x000B(読み取り専用)がある。
(2つのサービスは同じ1つの領域を読み書きする。権限が違うだけである)

...であることから、通常Felica Standardで使われる普通の手順
1. ポーリングする
2. システム一覧を取得
3. システムの中のサービス一覧を取得
4. サービスの中のエリア・ブロックにアクセス
が成立しない。

もう2も3も成立しない。

そのため、Felica Standardで使われるダンププログラムを使うと、
謎の00領域00サービスの山に悩まされることになる。
(実際にはコマンドエラーで失敗していると思われる)

一方、単純故に解決も簡単で
1. 0x88B4で決め打ちポーリングする
2. サービスは0x000B固定で、エリアも無視して、ブロックアドレス与えて単に読み書きする
に愚直に従えば良い。

良いのだが、ここでまたFelica Standardで現れなかったのであろう問題がぶつかった。
Felicalibが1バイトアドレスにしか対応していなかった。

そもそも、Felica Standardは細分化された構造にデータが置かれているから、
そんなに1つの領域に大量にデータを置くことがなかったのだろう。

一方、Felica Liteは1つの領域しかないため、そこに置くしかない。
そのため1バイトで表せるアドレス数では足りなかった。
(※本当のFelica Liteは足ります。Felica Plug等の外部メモリがついているタイプのが困るのです)

Felicaには2バイトアドレスでアクセスする方法が予め用意されていたので、
それでアクセスすれば問題なし...なのだが、ライブラリにはその機能がなかった。

そのため、改造が必要になった。
ちなみに、改造したライブラリはここにあります。
https://sites.google.com/site/gpsnmeajp/tools/felicalib_segfix
エラー対処や、いろいろな改善(改悪含め)が入ってます。

んで、読み書きできればこちらのもの。
あとはメモリマップに従ってやれば、読み出しできる。

Felicaなんで、標準242kbps、高速424bpsしかないけど。
さらに1ブロック単位アクセスをするとなお遅い。

おそーい。

それでも読み出すツールはできましたので、こちらに置いておきます。
https://sites.google.com/site/gpsnmeajp/tools/nfcsddumper
同梱されているライブラリは最低限の改造しかしていないものですので、
プログラムに組み込んで使うのであればこちらではなく、上のを使ってください


posted by gpsnmeajp at 21:01| Comment(0) | TrackBack(0) | 未分類

2017年04月27日

FlashAir W-03の新ファームウェア調査(FA9CAW3AW3.00.02)

FlashAir W-03に新しいファームウェアが公開されています.

ざっと調べた結果.

隠し関数の変更:1件(ConnectNum → ConnectedSTA)
隠し関数の追加:1件(search)
隠し関数の削除:0件
でした.

この変更により,現在FTLEのメニューが動作しません.
近いうちに修正予定ですが,それまでは
・FlashTools.luaのConnectNumをConnectedSTAに修正するか,
・直接/FTLE/edit.htmにアクセスしてご利用ください.
ご不便をおかけします.

未公開の関数を利用する際は,同様のリスク(変更・削除による動作不良)が
発生することを理解した上でお使いください.


posted by gpsnmeajp at 19:09| Comment(0) | TrackBack(0) | 未分類

2017年04月23日

Twilioを使って,FlashAirから電話をかけよう。(あと他の通知手段あれこれ)

電話/SMSをAPIから発信・着信できるサービスTwilioを使って,FlashAirから電話をかけます.
電話のほか,SMSも利用できます.また,将来的にはFAXも利用できるかもしれません.

簡易的な非常通報装置や,セキュリティ装置,呼び出しボタンなんかが作れます.
ネット上のサービスを利用するので,インターネットに出られるWi-Fi接続が必要です.

※画面にFlashAirを貼り付けてるのは,電話番号が画面に表示されるため

FlashAir開発者向け非公式Wikiに,サンプルのスクリプトと使い方の記事を上げました.
http://seesaawiki.jp/flashair-dev/d/Lua%3a%20Twilio%a4%f2%bb%c8%a4%c3%a4%c6%c5%c5%cf%c3%a4%f2%b3%dd%a4%b1%a4%eb

アプリもスマホもなしで,電話の着信さえできるなら誰にでもつかえる利点は
あるんですが,このサービス,有料,それも従量制課金のサービスなので,
どっちかというとFAとかそっち向きな気がしますが,
無料体験もできるので,気になる方は試してみてください.

ちなみに,電話を応答拒否したり,ほったらかしで切れたりすると,
しつこく掛けなおしてきますので,モーニングコールにも便利かも.
(少なくとも3回は掛けなおしてきた.)


ちなみに,アプリ500円ポッキリ買い切りで,以後通知受け取り放題の
PushOverというサービスもあります.フツーのスマホを持ってる方はこちらが便利.
https://pushover.net/
かなり頻繁な通知もサポートしてくれるので便利.
画像の添付や,通知音の変更などの細かいものにも対応してくれます.

HTTPSアクセスで通知を叩けるのですが,
実は,メールアドレスも有り,そこにメールを送ることでも通知を飛ばしてくれる有能.

これも,Wikiにサンプルあります.
http://seesaawiki.jp/flashair-dev/d/Lua%3aPushover%a4%c7%c4%cc%c3%ce


ヤダー!無料がいいー!って人は,IFTTTの通知機能を使えばいいんじゃないでしょうか.
IFTTTは都合上,頻繁な通知はサポートしません.(15〜30分に1回くらい?)
これもWikiにサンプル有りますのでどうぞ
http://seesaawiki.jp/flashair-dev/d/Lua%3aIFTTT%a4%ce%a5%c8%a5%ea%a5%ac
posted by gpsnmeajp at 18:09| Comment(0) | TrackBack(0) | 未分類

2017年04月17日

電子工作er向け301Zメモ

SoftBank 301Zを購入した。
まだ届いていないが、現在のところのメモ。

ソフトバンクのプリペイドは、
・基本料金かからない。
・3000円で60日。
・その後、360日着信専用で使用できる。
・つまり、着信専用として使うなら、月額214円ほどで維持できる。
・ちなみに、3000円で60日は、積み上げられるので、
 先に3000*6=1万8千円支払えば、360日通話通信可能にもできる。
 この場合月額1500円。ホワイトプラン契約したほうが安い。
 (チャージ上限は6万円)
・1年以内に解約すると2万円。ただし、1年放っておけば無料で解約される
・着信専用期間は、フリーダイヤルでも発信不可。警察等には可能
・SMSの送信はメール定額が必要。しかも他社に送れない。
 通常のメールは他社へも送れる月額約250円だが、
 その前にプリペイド期限が切れるため、メール専用でも月1500円かかることになる。
・SMSの受信は着信専用含みいつでも可。これは他社からのも受信可能。
・2回線まで持てる
・残高不足でメール定額が解約されても、電話番号が生きてるうちは
 アドレスが残っている。

301Zは、
・プリペイド専用に設計された端末。(ホワイトプランでも使えるが)
・オンラインストアで約6500円。うち4000円は初期チャージなので、
 実質2500円の端末
・本気のガラケー。というか、古い携帯電話。
・バッテリーが公称680時間(28日)持つ。ただし緊急速報メールを切った場合らしい。
・microUSB端子(500mA)で充電できる。
・着信音はプリセットされたものしか使用できない
 (しかもマナーモードの設定から編集に入る謎仕様)
・音楽はAMR形式かあるいは3GP形式に変換する必要がある。
・画像はjpgにしか対応していない
・カメラはおまけ
・ブラウザはついてるが、プリペイドでは使えない
 (メールの設定時には使えるらしい)
・USB接続ができるらしいが、まともに機能しない模様
・イヤホン端子は3.5mmで、OMTP規格。イヤホンマイクのボタンが動くかは不明
・実は壁紙は変更できる
・RTCによる自動電源ON・OFFの機能がついている
・簡易留守電がついている
・自動応答機能がついている

これらから、自動応答を有効にし、イヤホンマイク端子に
装置をつなげておけば、かなり安価な遠隔制御装置に使えると考えた。

着信専用なら月額250円程度で維持でき、操作もメインの携帯から
通話定額時間内を利用してやれば、ほぼタダで
携帯電波の届く範囲内ならどこからでも制御できる。

バッテリーの持ちの良さと、RTCによる電源オンオフを使えば、
屋外に設置、小型の太陽光電池で運用もできるだろう。

いわゆるIoT系のセキュリティや処理能力もいらない。


*追記
届いたので、色々とチェックしてみた。

作りは安っぽい、というより、懐かしい感じだ。
メールを開いたりするのに多少時間がかかるのはお愛嬌。
メールの添付ファイルに300KB制限があったりするのは、久々に思い出した。

イヤホンマイクだが、思っていたのと半々くらいの動作をする。
・着信中ボタンを押すと応答。会話中に押すと切断。
・待受中ボタンを押すと、バックライトが点灯するが、それ以外何の動作もしない。

というわけで、テレコントロールには使えるが、自動通報には使えないことがわかった。
せめて待受中、スピードダイヤルに掛けるとか、リダイヤルするくらいの挙動を
してくれてもいいと思ったのだが。

まあ一応、スピードダイヤル機能があるので、サーボモーターでダイヤルパッドを
長押しさせれば自動通報可能といえば可能である。
全部のボタンに同じ発信先を設定しておけば、とりあえずどれか長押しすれば発信されるので。

それと、携帯電話のDTMFの仕様を初めて知った。
iPhone側では長押しすると、ポーと言った感じで鳴るのだが、
携帯側では、ポッ、と切れる。音は圧縮された濁った音なのだが。
これは、交換機側で音を生成しているせいだろうか?

あと、「マナーモード」の項目が着信音の設定という謎があったのだが、
英語モードにすると「Sound Profile」になったので、納得。
なんでこんな訳し方したし。「サウンド設定」で良かっただろう。
昔のパナソニックの携帯みたいに。
posted by gpsnmeajp at 17:14| Comment(0) | TrackBack(0) | 未分類

2016年11月27日

ポータブック(XMC10)の初期セットアップ

2万円台に値下がりしているポータブック XMC10を思わず購入してしまった。

以前ヨドバシカメラで触っていて、気になっていたマシンであり、
値段を見て諦めたのが、この値段になるとは思っていなかった。

きちんと設定すれば騒がれているほど使い勝手も悪くないマシンであり、
個人的に初のSSD & 小型 & ファンレスマシンなので期待している。

もっとも、使うならきっちりチューンしてから使いたいタイプの人間なので、
休日丸一日使ってセットアップしたのでその記録をとっておく。

噂によれば、クリーンインストールすることで安定するらしい。
そもそも、空き容量の都合でAnniversaryUpdateが素では適用できないらしい
(USBメモリ等を挿せば行けるらしいが)ので、だったら、AnniversaryUpdate版を
クリーンインストールしたほうが何かと安心だろうと考えた。

SDカードスロットは、他の人のおすすめどおり
サンワサプライ Mac用microSDカードアダプタ ADR-MMICRO
を購入。たしかにピッタリのサイズである。

*セットアップ

初期設定
 →特に何もなし。Windows10の標準的なセットアップ。
  クリーンインストールするので適当にセットアップ。

  セットアップ終了後、電源設定を変更し、
  スリープしないようにすることをおすすめする。
  というのも、時間かかる作業が多い上、BIOSアップデート時に
  スリープしようものなら大惨事になりかねない。

  下手に不安定になられても困るので、自分のときは
  クリーンインストールまではWi-Fiには接続しないで行った。

回復ドライブの作成
 →回復ドライブはとりあえず作成しておかないと、後々失敗した時のダメージが大きい。
  SDカードは使えない(ウィザードで出てこない)ようなので、
  USBメモリか、USBカードリーダーを用意しておくこと。
  (しかし、なぜか手持ちのSDXCリーダは相性が悪いらしく認識してくれない)
  ひたすら放っておき、概ね3時間ほどかかった。

ドライババックアップ
 →先人に従い、C:\Windows\System32\DriverStoreをUSBメモリにバックアップする。
  これがないと、たしかに大変そうである。
  データ量が多いので、そこそこコピーには時間がかかる。
  クリーンインストール直後はSDカードが使えないっぽいのでUSBメモリに入れること。


  追記: バックアップ取れなかった人は、ドライバはSurface3 WiFiモデルの
   ドライバセットが使えるらしい。(未検証)
   http://d.hatena.ne.jp/TAKETYON/touch/20160805

公式BIOSアップデート
 →公式のBIOSアップデートツールを使いアップデートする。
  3回くらいの書き換えが走るので、割と時間掛かる。

ライセンスキー取得
 →デジタル認証なので特に意味は無いのだが、
  一応Windows Product Key Viewerでプロダクトキーをとっておく。
  結果的に言えば不要であった。


*クリーンインストール

AnniversaryUpdateのクリーンインストール
 →別のPCで、公式のインストールメディア生成ツールを使い、
  セットアップ用USBメモリを作成。
  ポータブックに差し、F2キー連打でUSBブート。

  散々言われているのでご存知だとは思うのだが、
  本体のマウスやキーボードは使用できないので、
  USBハブにUSBメモリと、マウスと、キーボードを挿して挑むこと。

  ドライバがないせいで、Wi-Fi接続が使えない
  →Microsoftアカウントが使えない になるので注意。
  監査モードで組み込むなり、USB-LANでも挿せば行けるのかもしれない。

ドライバのインストール
 →無事セットアップが済んだら、デバイスマネージャを開き、不明なデバイスを片っ端から
  バックアップしたDriverStoreを指定して認識させる。
  Wi-Fi、キーボード、マウス、音声、SDカード、Bluetoothなどは
  すべてこの段階で認識される。

  再起動して、増えたらまたそいつらも突っ込むこと。

  また、何の気なしに認識されているディスプレイアダプターも
  DriverStoreで更新するのを忘れずに。
  これだけやたら時間が掛かるが、Intel HD Graphicsで認識する。

  これが済んだら、USBハブは引っこ抜いて良い。

プリインストールappの削除
 →最初から入っている例えば「フォト」などを消す。
  どのくらい空き容量に貢献するのかは不明。
  ただ、片っ端からダウンロードしようとしていたので、多少は空くはず。
  Xboxアプリはシステムと結合されたらしく、削除できなくなっている。


facebook、minecraftなどの削除
 →Wi-Fiに接続すると色々入ってくるので、片っ端からアンインストール。
  スレによれば、Minecraftはそこそこ遊べるらしい。

公式ドライバアップデート導入
 →キングジム公式のドライバアップデートを適用。
  自分のときは、Wi-Fiしか適用できなかったが...?

電源設定、「退席中である事を〜」の解除
 →スリープの設定などもクリーンインストールでもとに戻ってるので、
  またスリープしないように直す。
  「退席中であることをデバイスが認識しているときに電力を節約する」は、
  調べる限り不味い挙動しかしないようなので解除。

Windowsアップデート
 →Windowsアップデートを一通り当てる。
  自分の環境だと2〜3時間くらいかかった。

Cortanaを止める
 →お好みで。

その他カスタマイズ
 →視覚要素をパフォーマンス優先にしたり
  (アニメーションは切らないほうがいい。
   アップデート時などの実行中表示も消えるため、フリーズしたかと思うことになる。)
  マウス速度を「左から3番目」にしたり。

1GBを復元ポイントに割り当て
 →復元ポイントなしは流石に不安なので、ここで1GB分割り当てた。
  意味があるかは不明。

追記: ディスク暗号化の解除
 →ディスク管理で確認すると、なぜかディスクが暗号化されていたので解除。
  ただでさえ圧縮しているのに、暗号化するとさらに重くなるであろう。
  暗号化用モジュールと、携帯機であることから、自動で有効になったか。

  設定→システム→バージョン情報→デバイスの暗号化 
  にて「オフ」にすると解除される。

*空き容量の確保

ここから、空き領域確保を行う。WindowsUpdateが終わってから行うこと。
結果として、6GBほど空く。28GB中の6GBなので、21%ほど空くことになる。

この時点で空き容量: 10.7GB
dismによるWinSxsのクリーンアップ
 →WindowsUpdateなどの情報や、不要なドライバ情報を整理してくれる。
  しかし、100%が2回出てから、フリーズしたようになるので注意。
  ひたすら放って置くこと。じりじりと空き容量が増える。

  一度、エラー2で終了するが、もう一度行うと20%くらいで正常終了となる。
  2.2GBほど空き領域が増える。

  Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

この時点で空き容量: 12.9GB

ディスククリーンアップ
 →おなじみのディスククリーンアップ。
  Windowsの販売デモ用ファイルなんかがある。
  といっても、環境にもよるのだろうが、0.1GBくらいしか減らない。

この時点で空き容量: 13.0GB
NTFS圧縮
 →CドライブにNTFS圧縮をかける。
  2時間半かかるという表示だったが、実際には1時間ちょっとで終わった。
  1.7GBほど空く。

この時点で空き容量: 14.7GB
compactos
 →Windows10から導入された、システムファイルの圧縮機能を実行する。
  30分〜1時間ほどかかる。

  これで2.1GBほど空き領域が出来る。
  これは持続的に作用するらしいので、WindowsUpdateでの
  増加を抑える効果もあるのでは。

  compact /CompactOS:always
この時点で空き容量: 16.8GB (使用量11GB)


*SDカードの利用

SDカードHDD化
 →めっちゃくちゃアクセス遅い(書き込みが恐ろしく遅い)ので取りやめ。
 →VHDを用いて、SDカードを物理ドライブに見せかける。
  生成後、500MB以上の空きがないと不安定になるらしいので注意。
  1時間半ほどかかった。


  作成後は、SDカードをSドライブに変更。
  遅延書き込みを有効にし、性能アップを期待する。

  VHDをフォーマットし、圧縮を有効。Dドライブに割り当て。
  VHDマウントツールを用いて、起動時に自動マウント。

  VHDマウントツール

  タスクスケジューラの設定の際、アカウントをSYSTEMにし、
  「スタートアップ時」と「ログオン時」、「ワークステーション アンロック時」
  の両方をトリガにしておくと安心。
  -bootの効果で、既にマウントされている場合は無視されるし。

  その後、レジストリからSドライブを非表示(0x40000)に設定。
  HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\に
  Explorerキーを作り
  HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer
  そこにDWORDで値:NoDrivesを作り、0x40000を設定して再起動。
  すると、ExplorerからSドライブが見かけ上消える。

  もちろん、見かけ上なので、S:\を直接叩くと開けるし、

  ディスク管理にも存在する。他のアプリケーションからもアクセスできる。
  容量パンパン赤ゲージのSDカードを見たくない人専用である。


  参考:マイコンピュータのドライブを非表示にする - 日経トレンディ

SDカードのCドライブ組み込み
 →NTFSを適用した上でさらにVHDを適用すると、
  (設定が悪いのか)数kb/secとかいう超低速になったので、
  代わりに、「空のNTFSフォルダにマウントする」で、SDカードをCドライブに割り当てた。
  一応、これでリムーバブルメディアへインストールできないタイプのソフトウェアも
  インストールできるようになるらしい。

  参考: http://funlike.org/wp/archives/11693

  SDカードをSドライブに割り当てるのはそのままにしておき、
  Sドライブを非表示にするのもそのままとした。

ユーザーフォルダ(デスクトップなど)の移動
 →これは移動するだけ。

画面調整編
ポータブックって妙に目疲れない?

nyoiscreenの導入
 →XMC10の画面は、ギラついている上に、最低輝度でもまだ明るい。
  メインPCの最低輝度より明るいため、同等に下げる効果を狙ってnyoiscreenを導入。
  これはカラーフィルタであり、ソフトウェア的に画面の輝度を下げる効果がある。

Intel HD Graphicsでの調整
 →どうみてもこの液晶は青が強すぎる。
  ただでさえ16bitカラーで色が悪い液晶をさらに悪くするのもあれだが、
  青の明るさを-60、緑と赤の明るさを+3に設定。
  個人的に見やすい色に変更。

スピーカーのプロパティ
 →このPCの音、妙に高音ばかりのスカスカした音だと思わないだろうか。
  なんと、Intel HD AudioのSystem Effectsが有効になっており
  こいつがステレオ感を無駄に上げている。
  オフにすると、少しこもった低音が出るようになる。

アプリケーション導入編
Chromeの導入
 →メモリ不足環境では嫌われがちのChromeだが、
  自分が主にGoogle関係のサービスをメインに使うので導入した。
  Edgeでもいいかと思ったが、崩れてしまうため。
  
  導入先はCしか選べないが、キャッシュ先を
  先程フォルダにマウントしたSDカードに変更した。

  シンボリックリンクを貼る手法である。
  ※SDカード上にキャッシュを配置するのは、本来は悪手である。
   (低速化するため)。RAMDISKがいいのだが、RAMに余裕が無いのでこうするしかない。

office365の導入
 →office365は、インストールしようとするとフルセット5GBくらい入れようとしてくる。
  SkypeやらAccessやらはポータブックには不要だろう。
  以下のconfiguration.xmlを保存し、Office 展開ツール付属のsetup.exeに食わせると
  Word、Excel、PowerPoint、Outlookの標準セットのみ(1.02GB)でインストールできる。

  なお、インストール先は強制でCドライブである。

  注意:  Product IDは入れる対象のライセンスにより変化する。


 
   
     
     
       
       
     
       
     
 



VisualStudioの導入
 →Dドライブ(仮想VHDのSDだった)を2GB、Cドライブを5GB食う(強制)な上に
  インストールにまる一日程かかり(環境により)
  アンインストールしてもゴミをたくさんおいていくので、
  入れようとしないほうが良い。
  そういうマシンではない。

 →入れてしまったら
  「@pnp0a03氏: VS2013-2015の場合、VS根こそぎアンインストーラというのを
   MSのエンジニア氏がGitHubに上げています
   機会がありましたらどうぞ 僕は一度試しましたがきれいさっぱり消えました
   https://github.com/Microsoft/VisualStudioUninstaller
  https://twitter.com/pnp0a03/status/803568494478401536


休止状態を使えるようにする
 →なぜかポータブックは(クリーンインストール後だけかもしれないが)
  スリープはできても休止状態にできない。

  powercfg /a で確認すると、
  「この休止状態ファイルの種類では休止状態はサポートされません」と
  言われるので、管理者権限のあるコマンドプロンプトで以下を実行。

  powercfg /h /type full
  powercfg /h on

  これで、電源設定に休止状態のチェックボックスが現れるようになる。
  参考: http://kokoore.com/windows10-hiber  

  ちなみに、原因かと思ってInstant Goをレジストリで無効にしたところ、
  電源設定に、隠蔽されていた各種省電力設定が現れたので、
  いじりたい人は試してみるといいかもしれない。


Bluetoothネットワークの設定
 →iPhoneなどのBluetoothテザリングが使える機種を持ってる場合、
  端末操作無しでテザリング開始でき、省電力なBluetoothテザリングの
  設定をしておくと気軽に使えて便利。

  Bluetoothテザリングを有効にした状態でペアリングし、
  コントロール パネル\すべてのコントロール パネル項目\デバイスとプリンター を開き
  Bluetoothデバイスを右クリックして、「接続方法」→「アクセスポイント」をクリック。
  
  というのも面倒なので、デスクトップにデバイスのショートカットを作っておくと
  右クリック→クリックの2操作だけで接続できる。

  参考: http://mobamen.info/pc/887
posted by gpsnmeajp at 20:37| Comment(2) | TrackBack(0) | 未分類

2016年10月08日

自作基板用にPS/2キーボードを買った

PS/2キーボードを購入した。



サンワサプライ PS/2キーボード SKB-L1 サンワサプライ via amazonJP (682円)
サンワサプライ SANWA SUPPLY SKB-L1 [PS/2キーボード] - ヨドバシ.com (750円)
見ての通り、値段がかなり安い。それでいて、今時PS/2専用である。

もっとも、自分はネットショップで買う時間ももったいなかったので、地元の電気店で850円で購入した。
安い割に、キータッチも悪くなく、アプリケーションキーまでついている。
そして綺麗だ。中古の200円のPS/2キーボードを買おうか迷ったので、尚更きれいに見える。

なぜ今更PS/2キーボードなんかを購入したかというと、とある基板にキーボードを繋ぐためである。

その基板ではTTBASICが動いているが、シリアル入出力では使いにくいので、画面とキーボードを繋いで使うのだ。

Arduino互換機版で作成しているため、Arduino PS/2ライブラリ(の日本語キーボード仕様版)で動いてくれる必要がある。
このライブラリ、簡単のためにPS/2キーボードのセルフテストや初期化をやっていないらしく、
一部の変なキーボードや、USB/PS/2兼用だと変な反応を示す。(俗に、ichigojamで使えないキーボード)

このキーボードは問題なく動作したことを記しておく。
posted by gpsnmeajp at 23:26| Comment(0) | TrackBack(0) | 未分類

2016年10月04日

Sound Packet


マイクからの音量を監視し、しきい値以上の大きさの音を検出したら、
外部サービスへ通知するツール、作りました。

別室のラジコンバッテリーの充電が終わるのを待つのが面倒だったので、
こういうツールがないかとネットを探し回るも、全然見つからず。

スマホに通知するために簡易ツールを作ったのですが、
せっかくなのでネットに上げたら誰か使うことあるかな、と思い、
見栄えを整えて上げた次第です。

ダウンロードはこちら
https://sites.google.com/site/gpsnmeajp/tools/sound-packet
posted by gpsnmeajp at 23:39| Comment(0) | TrackBack(0) | 未分類

2016年09月15日

ボクのかんがえたさいきょうのFlashAir拡張ボード

ボクのかんがえたさいきょうのFlashAir拡張ボード。
検討だけ。

・ボード上にはMCUが乗っており、共有メモリを使ってFlashAirと通信する

・共有メモリ上には固定の領域を設けておく。
 デジタル入力(8本?)
 デジタル出力(8本?)
 A/D入力(10bit?5本?)
 PWM出力(サーボ用)(5本?)
 LCD(I2Cでもなんでもいいので適当に)
 UART(つける?)

・一定周期で更新。
 出力は、サイクルごとにメモリを読みだし、に書き込まれた情報通りに出力。
 A/Dや入力も、サイクルごとに行う。
 LCDは、共有メモリ上の更新フラグが立った時、LCDに書き込む感じ。

・MCUはAVRかそこらで実装する。
・MCUの書き換えは想定しない。

・空き領域を使って、特殊コマンドを発行していろいろ出来ると楽しそう?

利点
・共有メモリなので、FlashAir上のLuaや、ブラウザのjavascriptの両方から操作可能。
・入出力が少なく、種類もないFlashAirの欠点をカバーできる
・一般的な5VのI/Oが利用できる
・Wi-Fiを活かせる
・FlashAir側からすれば単に共有メモリへの読み書きであり、プログラムがシンプル
・MCU側で好きなようにできるため、機能の拡張がしやすい

欠点
・共有メモリを扱う都合上、遅い。8MHzで通信しても、書き込み・読み出し合計3ms掛かる。
 いろいろ考えると、200Hzで更新できればいいほうか。
・汎用マイコンでいい気もしないでもない。
・せっかくのPIOやSPI機能を活かせない
・I2CのIOポートエキスパンダーのほうが安価では?
iSDIOとしての通信になるため、SDカードライセンスの問題が出てくる


ライセンスさえ問題なければ、個人で作って売れそうな気もしないでもない。

SDカード対応と謳わなければよいのか?
ArduinoとSDカードシールドなんかのライセンスはどうなってるんだ?
プログラムが入っていなければ問題ないのか?

Airioなんかは、あれはSDカードとしての動作ではないから引っかからないのか?
posted by gpsnmeajp at 23:35| Comment(0) | TrackBack(0) | 未分類

2016年09月09日

FlashAirの共有メモリにアクセスするサンプル

突然、無性にArduinoのSDカードライブラリに頼らず、FlashAirの共有メモリにアクセスしたくなったので。

今後、Luaスクリプトとマイコンの間で通信したくなる機会が増えると思うので、
苦手意識の強かったSDカードコマンドでの通信を試すべきだと思った。

SDカードライブラリに頼らなかったのは、あれがGPLだということと、
PIC等他のC環境で使いたかったため。移植を楽にするため、共有メモリアクセスに特化したかった。

ACMD41での初期化など、色々はまったので、SDカードの初期化の手順的な参考にもなるかもしれない。
プログラム本体は、長いのでサイトの方にあげてある。
https://sites.google.com/site/gpsnmeajp/electricmemo/flashairno-gong-youmemoriniakusesusurusanpuru

DIV4で、512Byteのアクセスに2.5ms程度。
DIV2だと1.8ms程度。
posted by gpsnmeajp at 22:58| Comment(0) | TrackBack(0) | 未分類

2016年09月06日

Grove MP3モジュール v2.0 (KT403A)の仕様について(曲選択機能)

Grove MP3モジュール v2.0 (KT403A)の仕様について。

秋月で売られているKT403Aのモジュールは、安価で、
SDカード(およびUSBメモリ)からmp3音楽を再生できる、非常に便利なモジュールであるが、
曲選択機能においてわかりづらい場所があって困ったので、記録しておく。

このモジュール、単に入れた曲を再生したり、切り替えたりするのは問題ない。
しかし、このモジュールを使いたい多くの人は、特定のmp3ファイルを指定して再生したいだろう。
ここで引っかかりが出る。

まず、予め言っておくが、秋月のページに有る英文データシートは明らかに項目数が少ない。
翻訳の際の誤植もある。中国版データシートを参照することをおすすめする。

ちなみに、通信のチェックサムがさもあるかのように書かれているが、実際に通信する際には
チェックサムは不要である。有効にするオプションが有るのかもしれないが。


まず、最初に、特定のファイルを再生しようとして使うのは、
"Play specific track*" だろう。
Groveのサンプルで言うところの
void SpecifyMusicPlay(uint16_t index)
である。

0x7E 0xFF 0x06 0x03 0x00 FF FF 0xEF
と送れば、65535.mp3が再生される、と思うかもしれない。
実際には、65535番目に記録されたファイルが再生される。

0.mp3
1.mp3
999.mp3

があったとき、
0x7E 0xFF 0x06 0x03 0x00 00 02 0xEF
と送ると、999.mp3が再生される。(02ではなく、03だったかもしれないが)

データシートをよく読むと、「Note that the empty filed need to be filled with specific numbers.」と
書かれているが、それはこの仕様のためである。


"2.3.7 Specify a file to play tracks inside [0x14]"
も同じで、

Play track 0255 (track’s name) in folder 0001 : 7E FF 06 14 00 10 FF FD D8 EF
Play track 1999 (track’s name) in folder 0001 : 7E FF 06 14 00 17 CF FE 01 EF
Play track 0001 (track’s name) in folder 0012 : 7E FF 06 14 00 C0 01 FE 26 EF
Play track 0255 (track’s name) in folder 0012 : 7E FF 06 14 00 C0 FF FD 28 EF
Play track 1999 (track’s name) in folder 0012 : 7E FF 06 14 00 C7 CF FD 51 EF

と書かれていることから、

例えば
7E FF 06 14 00 10 FF FD D8 EF
と送れば、フォルダ0001の、0255.mp3が再生される。
...と思うだろう。実際には、1番目のフォルダの、255番目に記録されたファイルが再生される。
255番目である。ファイル名に関係なく、FATに記録された順番で再生されるらしい。


特定のファイル名を再生したいならば、
"Specify a certain folder and play tracks inside [0x0F]"
Groveのサンプルで言うところの
void SpecifyfolderPlay(uint8_t folder, uint8_t index)
を使う必要がある。

Specify folder name 01 and track name 001xxx.mp3 7E FF 06 0F 00 01 01 EF
Specify folder name 11 and track name 100xxx.mp3 7E FF 06 0F 00 0B 64 EF
Specify folder name 99 and track name 255xxx.mp3 7E FF 06 0F 00 63 FF EF

※255が誤植で001になっているので注意。

これも表記がわかりにくいのだが、

Specify folder name 01 and track name 001xxx.mp3 7E FF 06 0F 00 01 01 EF
というのは、つまり、01という名前のフォルダの、001から始まるファイル名が再生されるということである。
中国版データシートでは、スクリーンショットとともに丁寧に説明されている。

つまり、
01\001Test.mp3 → 7E FF 06 0F 00 01 01 EF
01\002Wow.mp3 → 7E FF 06 0F 00 01 02 EF
02\255Buzz.mp3 → 7E FF 06 0F 00 02 FF EF
ということである。

もちろんこちらは空のファイルで埋める必要はない。きちんとファイル名で再生してくれる。

とりあえず以上。
posted by gpsnmeajp at 21:17| Comment(0) | TrackBack(0) | 未分類

2016年09月05日

Pebble Timeのファームウェアが4.0になった。

Pebble Timeのファームウェアが4.0になった。
メニュー画面がシンプルになり、アイコンが表示されてわかりやすくなった。


また、QuickViewが追加され、近いイベントがウォッチフェイスに表示されるようになった。
ところがこれが曲者で、自作のWatchFaceは、ちょうどQuickViewにすっぽり隠れる位置に
情報を集約させているため、時計が見えなくなってしまうのだ。

時計が見えず、次の予定までの時間のみが見える時計、というのも、悪くはないかもしれないが困る。
一応、設定からQuickViewを無効にすれば今までどおりに使えるのだが、
せっかくのスマートウォッチな機能を無効にするのもアレである。

ので、QuickViewが表示されるときは、単にWatchFace全体を上にずらすことにした。単純明快である。

しかし、Pebble公式SDKの解説がわかりづらくて困った。自分の読解力がないだけかもしれない。
ようは簡単な話で、

今まで、
   GRect bounds = layer_get_bounds(window_layer);
で得ていた全画面の描画領域を、
   GRect bounds = layer_get_unobstructed_bounds(window_layer);
に置き換えて、座標指定を相対化してあれば勝手にずれる、という話なのだが、
自作のWatchFaceはそれではうまくいかない。

結局、描画オブジェクトを1枚のレイヤーに集約し、

   GRect QVbounds = layer_get_unobstructed_bounds(window_layer);
   layer_set_bounds(all_layer, GRect(0, QVbounds.size.h +(0-168), QVbounds.size.w, 168));
で移動。

しかしこれでは、表示中にQuickViewが現れた場合に対応しないので、
//unobstructedハンドラ
static void prv_unobstructed_will_change(GRect final_unobstructed_screen_area,
void *context) {
  GRect bounds = final_unobstructed_screen_area;
  layer_set_bounds(all_layer, GRect(0, bounds.size.h +(0-168), bounds.size.w, 168));
}

//unobstructedハンドラ
static void prv_unobstructed_did_change() {
   Layer *window_layer = window_get_root_layer(s_main_window);
  GRect bounds = layer_get_unobstructed_bounds(window_layer);

  layer_set_bounds(all_layer, GRect(0, bounds.size.h +(0-168), bounds.size.w, 168));
}
を追加。

static void main_window_load(Window *window) 
  //画面領域サービス(Quickview)に登録する
  UnobstructedAreaHandlers handlers = {
    .will_change = prv_unobstructed_will_change,
    .did_change = prv_unobstructed_did_change
  };
  unobstructed_area_service_subscribe(handlers, NULL);
を追加。

でなんとかなった。
詳細は後でサンプルを上げようと思う。

posted by gpsnmeajp at 23:06| Comment(1) | TrackBack(0) | 未分類

2016年09月01日

ポテンシャル法のC言語での実装例

ロボットの障害物回避などに使われる、ポテンシャル法のC言語での実装例
(あっているかは不明なので、参考程度に)


なんで調べても数式ばっかりで実装例が出てこないんだろう?


*ポテンシャル場の確認
#include <stdio.h>
#include <math.h>

double get_pot(double x, double y)
{
const double Enemy1_x = 5.;
const double Enemy1_y = 10.;

const double Enemy2_x = -10.;
const double Enemy2_y = -20.;

const double Goal_x = 17.;
const double Goal_y = 0.;

const double Weight_Enemy1 = 1.0;
const double Weight_Enemy2 = 1.0;
const double Weight_Goal = 5.0;

//スカラー場なのでx,y成分共に同じ
double Enemy1_pot = 1.0 / sqrt((x - Enemy1_x)*(x - Enemy1_x) + (y - Enemy1_y)*(y - Enemy1_y));
double Enemy2_pot = 1.0 / sqrt((x - Enemy2_x)*(x - Enemy2_x) + (y - Enemy2_y)*(y - Enemy2_y));
double Goal_pot = -1.0 / sqrt((x - Goal_x)*(x - Goal_x) + (y - Goal_y)*(y - Goal_y));

double pot = Enemy1_pot * Weight_Enemy1 + Enemy2_pot * Weight_Enemy2 + Goal_pot * Weight_Goal;
return pot;
}

int main(void)
{
FILE *fp = fopen("output.txt", "w");
if (fp == NULL)
{
printf("Err\n");
return -1;
}

printf("wait...\n");

const double delta = 0.1;
const double max = 1.0; //上限(発散部分除外)
// const double zoom = 10.;
for (double x = -30; x < 30; x += delta)
{
for (double y = -30; y < 30; y += delta)
{
double pot = get_pot(x, y);
if (pot > max)
pot = max;
if (pot < -max)
pot = -max;


fprintf(fp, "%lf,%lf,%lf\n", x, y, pot);
}
fprintf(fp, "\n");//pm3dは空行がないと補完しない
}
fclose(fp);
printf("Done\n");

return 0;
}


*GNUPLOTスクリプト
set pm3d corners2color max
set pm3d depthorder
set datafile separator ","
set xrange[-30:30]
set yrange[-30:30]
#set view map
splot "output.txt" with pm3d


*結果


*勾配ベクトル場の確認
#include <stdio.h>
#include <math.h>

double get_pot(double x,double y)
{
const double Enemy1_x = 5.;
const double Enemy1_y = 10.;

const double Enemy2_x = -10.;
const double Enemy2_y = -20.;

const double Goal_x = 17.;
const double Goal_y = 0.;

const double Weight_Enemy1 = 1.0;
const double Weight_Enemy2 = 1.0;
const double Weight_Goal = 5.0;

//スカラー場なのでx,y成分共に同じ
double Enemy1_pot = 1.0 / sqrt((x - Enemy1_x)*(x - Enemy1_x) + (y - Enemy1_y)*(y - Enemy1_y));
double Enemy2_pot = 1.0 / sqrt((x - Enemy2_x)*(x - Enemy2_x) + (y - Enemy2_y)*(y - Enemy2_y));
double Goal_pot = -1.0 / sqrt((x - Goal_x)*(x - Goal_x) + (y - Goal_y)*(y - Goal_y));

double pot = Enemy1_pot * Weight_Enemy1 + Enemy2_pot * Weight_Enemy2 + Goal_pot * Weight_Goal;
return pot;
}

int main(void)
{
FILE *fp = fopen("output.txt", "w");
if (fp == NULL)
{
printf("Err\n");
return -1;
}

printf("wait...\n");

const double delta = 1.2;
// const double zoom = 10.;
for (double x = -30; x < 30; x += delta)
{
for (double y = -30; y < 30; y += delta)
{
//勾配ベクトル算出 -grad(P)
double vx = -(get_pot(x + delta, y) - get_pot(x, y))/delta;
double vy = -(get_pot(x, y + delta) - get_pot(x, y))/delta;
double v = sqrt(vx*vx + vy*vy);

// vx *= zoom;
// vy *= zoom;
//見やすさのためにベクトルを正規化
vx /= v;
vy /= v;

// printf("%lf,%lf,%lf\n", x, y);
if(!isnan(vx) && !isnan(vy)) //無効な値は除外
fprintf(fp, "%lf,%lf,%lf,%lf,%lf\n", x, y, vx, vy,v);
}
// fprintf(fp, "\n");//pm3dは空行がないと補完しない
}
fclose(fp);
printf("Done\n");

return 0;
}


*GNUPLOTスクリプト
set datafile separator ","
set xrange[-30:30]
set yrange[-30:30]
set size ratio 1
set palette rgb 33,13,10
#plot "output.txt" u 1:2:3:4:(sqrt($3*$3+$4*$4)) w vector lc palette ti ""
plot "output.txt" u 1:2:3:4:5 w vector lc palette ti ""


*結果

*ポテンシャル法による障害物回避
#include <stdio.h>
#include <math.h>

double get_pot(double x, double y)
{
const double Enemy1_x = 5.;
const double Enemy1_y = 10.;

const double Enemy2_x = -10.;
const double Enemy2_y = -20.;

const double Goal_x = 17.;
const double Goal_y = 0.;

const double Weight_Enemy1 = 1.0;
const double Weight_Enemy2 = 1.0;
const double Weight_Goal = 5.0;

//スカラー場なのでx,y成分共に同じ
double Enemy1_pot = 1.0 / sqrt((x - Enemy1_x)*(x - Enemy1_x) + (y - Enemy1_y)*(y - Enemy1_y));
double Enemy2_pot = 1.0 / sqrt((x - Enemy2_x)*(x - Enemy2_x) + (y - Enemy2_y)*(y - Enemy2_y));
double Goal_pot = -1.0 / sqrt((x - Goal_x)*(x - Goal_x) + (y - Goal_y)*(y - Goal_y));

double pot = Enemy1_pot * Weight_Enemy1 + Enemy2_pot * Weight_Enemy2 + Goal_pot * Weight_Goal;
return pot;
}

int main(void)
{
FILE *fp = fopen("output.txt", "w");
if (fp == NULL)
{
printf("Err\n");
return -1;
}

printf("wait...\n");

//出発地点
double x = -10.;
double y = 20.;

const double delta = 0.1;
const double speed = 0.1;
for (int i = 0; i < 1000;i++)
{
//勾配ベクトル算出 -grad(P)
double vx = -(get_pot(x + delta, y) - get_pot(x, y)) / delta;
double vy = -(get_pot(x, y + delta) - get_pot(x, y)) / delta;
double v = sqrt(vx*vx + vy*vy);


//ベクトルを正規化
vx /= v / speed;
vy /= v / speed;

//移動反映
x += vx;
y += vy;

fprintf(fp, "%lf,%lf,%lf,%lf,%lf\n", x, y, vx, vy, v);
}
fclose(fp);
printf("Done\n");

return 0;
}


*GNUPLOTスクリプト
set datafile separator ","
set xrange[-30:30]
set yrange[-30:30]
set size ratio 1
set palette rgb 33,13,10
#plot "output.txt" u 1:2:3:4:(sqrt($3*$3+$4*$4)) w vector lc palette ti ""
plot "output.txt" u 1:2:3:4:5 w vector lc palette ti ""


*結果

追記: コメントにスカラー場なので」と書いてしまっているが、x,yによらず同じ形状なので、が正しいか。

posted by gpsnmeajp at 00:15| Comment(0) | TrackBack(0) | 未分類

2016年08月19日

Mighty1284Pのヒューズ設定について

とある目的で、大容量なROMとRAMを積んだArduinoが必要になったので、
ATMEGA1284PをArduino化しようとしたのだが、
その際に使おうとしたMighty-1284Pでハマったので書いておく。

optiboot導入後。

症状は、短いスケッチで書き込みエラーが2回に1回出る。
長いスケッチは毎回エラーが出る。
シリアル通信をエコーバックするだけのスクリプトが正常に動かない。

原因は、ヒューズビットの問題であった。
セラロックが使えない、という問題で既知であるが、水晶でもおかしくなる。

参考にしたのはここ
http://www.avrfreaks.net/forum/mega1284p-usart-receiver-issues-solved

スレ主は、ローパスフィルタを付けて解決していたが、実際には一番下にある
ヒューズビットの修正を行うことで解決する。

具体的には、Mighty-1284Pに同梱されたboard.txtを中身を開き、
各ヒューズの設定を以下のように書き換える。
(デフォルトでは、0xff, 0xde, 0xfdになっているらしい。)

これで安定する。

mighty_opt.bootloader.low_fuses=0xf7
mighty_opt.bootloader.high_fuses=0xd6
mighty_opt.bootloader.extended_fuses=0xfd

avr_developers.bootloader.low_fuses=0xf7
avr_developers.bootloader.high_fuses=0xd6
avr_developers.bootloader.extended_fuses=0xfd

bobuino.bootloader.low_fuses=0xf7
bobuino.bootloader.high_fuses=0xd6
bobuino.bootloader.extended_fuses=0xfd

mighty.bootloader.low_fuses=0xf7
mighty.bootloader.high_fuses=0xd6
mighty.bootloader.extended_fuses=0xfd

mighty8.bootloader.low_fuses=0xf7
mighty8.bootloader.high_fuses=0xd6
mighty8.bootloader.extended_fuses=0xfd


関係ないが、AVRISP mkIIをArduino IDEから使おうとすると、libUSBが必要だが、
64bit環境のWindowsの場合は、binの中にある、inf-wizard.exeを管理者権限で実行し、
さらにウィザード中の「Install Now...」を使わないと正常に入らないので注意。


ちなみに、ヒューズビットの意味
FF DE FD
11111111 11011110 11111110

CKDIV8 = 1
CKOUT = 1
SUT1 = 1
SUT0 = 0
SKSEL3 = 1 外部クリスタル、低振幅で発信(デリケートなクリスタル用)
SKSEL2 = 1
SKSEL1 = 1
SKSEL0 = 1

OCDEN = 1
JTAGEN = 1
SPIEN = 0
WDTON = 1
EESAVE = 1
BOOTSZ1 = 1
BOOTSZ0 = 1
BOOTSZT = 0

BODLEVEL2 = 1
BODLEVEL1 = 1
BODLEVEL0 = 0

---

F7 D6 DE
11110111 11010110 11111110

CKDIV8 = 1 クロック分周無効
CKOUT = 1 クロック出力無効
SUT1 = 1 パワーアップ待機時間16Kサイクル(リセット時は14サイクル+4.1ms)
SUT0 = 0
SKSEL3 = 0 外部クリスタル、最大振幅で発信(通常のクリスタル用)
SKSEL2 = 1
SKSEL1 = 1
SKSEL0 = 1

OCDEN = 1 デバッグ禁止
JTAGEN = 1 JTAGは拒否
SPIEN = 0 SPIプログラミングは許可
WDTON = 1 ウォッチドックタイマは無効
EESAVE = 0 EEPROMをイレースから保護する
BOOTSZ1 = 1
BOOTSZ0 = 1
BOOTSZRST = 0 リセットベクタはブートローダー

BODLEVEL2 = 1
BODLEVEL1 = 1
BODLEVEL0 = 0

posted by gpsnmeajp at 22:20| Comment(0) | TrackBack(0) | 未分類

2016年07月16日

DJI Inspire-1の送信機(RC)のアップデートが行われない場合

DJI Inspire-1の送信機(RC)のアップデートが行われない場合。

職場でひさしぶりにDJI Inspire-1を飛ばそうと思ったら、いつものごとく
「アップデートしろ」警告が出た。

いつものように、DJI公式サイトからアップデータをダウンロードすると、
機体・カメラ・バッテリーのアップデートは正常に終わったのだが、
(SDカードが破損していてフォーマットしたりなんていうことはあったのだが)
送信機のアップデートだけ何故か行われない。

ログを確認してみると、「アップデータが古いからアップデートしなかったよ。これ最新」
みたいなことを吐きやがる。

しかし、iPadを繋いでDJI GOアプリを使うと「1.3.0以上に送信機をアップデートしないと、
アプリからのアップデートはできねぇよ」的なエラーを吐きつづける。

数時間格闘し続け、Hard Resetなども試して、結局わかったこと。

どうやら、最近のアップデータには送信機用のアップデータが含まれていないらしい。
ここのサイト(日本の正規代理店)から、2015年8月の「INSPIRE 1 ファームウェア v1.3.0.0」を
ダウンロードし、送信機のアップデートをすると、アプリからアップデートが可能になる

ので、あとはUSBでiPadを繋いでアップデートすれば良い。

ひどい時間がかかった。
というか酷い罠だ。1.3.0以上ではなく、1.3.0が必要だとは。
(頻繁にアップデートしていれば、近い時期のファームには含まれていたのかもしれない)。

以上。


posted by gpsnmeajp at 23:23| Comment(0) | TrackBack(0) | 未分類

豊四季タイニーBASICのメモ

タイニーBASICをCで書く を購入した。
中身はTTBASIC(豊四季タイニーBASIC)の解説だ。

Tiny BASICをC言語で実装した例はいくつかあるが、
その中でも移植性とわかりやすさに重点を置き、拡張性も高く設計されていることが
ソースコードを読んでわかったので本を購入した。

中心部分は変わらず、各機種対応のプロジェクトファイルが配られているのだが、
Arduino版のソースコードに至っては1行ごとに日本語のコメントが付いている。
C言語が読め、TinyBASIC全体の知識がある人ならそれだけで理解・改造ができるだろう。

自分は、一部のデータ構造の意味などがわからなかったので本を購入したのだが、
図や筆者の言葉でしっかりと全体的な説明がなされており、さらにSAVE・LOAD命令などの
実装例も乗っていたので、かなり助かった。

ただ、初心者向きではない。C言語に関する説明はないからだ。
あくまで、C言語でプログラム作るのにある程度なれており、BASICを導入したいと
考えた人向けだ。

また、TTBASICには機種依存性をなくすため、本当に最低限の機能しかついていない。
改造して使いたい人でないと本を買う意味は無いだろう。

私はこれから、個人用に拡張したBASIC環境を構築しようと考えている。

その上での色々なメモを此処に書いていこうと思う。

・64bit環境では動作しない
 64bitのWindows環境で実行しようとすると、コンパイル時にポインタの型変換に警告が出る。
 「64bitのポインタを32bitで受けようとしているぞ」というもので、
 その状態で構造文(FOR等)を実行すると「スタック足りない」エラーが出る。
 型を変更するか、32bit環境で動かすことをおすすめする。
 もっとも、TTBASIC自体、組み込みなどの環境向けなので、
 64bitなんて贅沢な環境のことは考えていないのだろう。

・Windowsのおせっかい
 debugで実行すると、時折エラーを吐いて落ちることがある。
 関数の戻り値が代入されていない、など。
 設計者の思想的に、エラーで戻るときには戻り値は使われないため、
 ROMを節約するためか、何の値も代入されないようだ。
 正直Windowsの開発者向けおせっかい機能だが、それを切るか、治すかすると良いだろう。
 っていっても、こんなの書かなくても見りゃわかると思うけれども。

改造したものは以下においてある。
https://sites.google.com/site/gpsnmeajp/ttbasic
posted by gpsnmeajp at 23:15| Comment(0) | TrackBack(0) | 未分類

2016年06月30日

LUA_RUN_SCRIPTが動かない時の切り分け方

※本情報は、参考のために残しており、古い情報を含みます。
現在主に更新しているのはwikiですので、最新の情報はwikiを参照してください。

FlashAir開発者向け非公式wiki


---

FlashAirのLuaスクリプト実行機能に、
起動時に実行する"LUA_RUN_SCRIPT"という設定がありますが、これが結構クセモノです。

なにがクセモノかというと、スクリプトでエラーが起きたことを知る手段がありません。
それだけなのですが、それが本当に致命的。文法エラーひとつわからない。

ので、そんな時の切り分け方を以下に記します。

0. ファームウェアバージョンを確認する
 CONFIGファイルのVERSIONを確認してください。
末端がW3.00.00の場合は古いバージョンですので、ファームウェアアップデートをしてください。
Luaスクリプトの実行に関していくつものバグが有ります。

1. ブラウザから実行できるか確認する
 起動時に動くスクリプトなら、ブラウザからも実行できるはずです。
公式チュートリアルだとなぜか、一番最初にやることが起動時に実行になってますが、
正直ハマります。まずはブラウザからLuaスクリプトを叩いて実行できるか確認しましょう。
それで実行できないものはそもそも起動時にも実行できません。
FlashAirでは、実行エラーは出力なしのだんまりになります。

ちなみに、手前味噌ですが、FlashTools Lua EditorのDebug機能を使うと、
具体的に何のエラーが起きているのか知ることができます。

2. CONFIGの記述ミスをしていないか確認する。
 スペルミスをしていませんか?
最終行を空行にしていますか?

3. ファイル書き込みの場合: 差し込んで、10秒待って抜いて、また差し込んでみる
 ファイルはブラウザ上ではリアルタイムに更新されますが、
PCなどからは確認できないことが多いです。
というのも、差込時に読み出し、その後の変化は知らんぷりなためです。
なので、実行が終わった辺りで差し込み直すといいでしょう。
ちなみに、LUA_RUN_SCRIPTは暴走防止等で、起動から実行まで最低5秒くらい待たされます。

4. 通信系の場合: スクリプトの頭に30秒〜60秒くらいの待ち時間を入れてみる
 割と見落としがちなのですが、LUA_RUN_SCRIPTはWi-Fi接続が確立する前から
実行が始まります。ので、スクリプト起動後すぐにfa.requestなどの通信をしようとしても、
どうやってもうまく行きません。
ブラウザでは動くのに起動時に動かないの大抵はこれです。

おまけ. fa.pioを叩きまくるとホスト機器と通信不能になります。
 スクリプト内でfa.pioをループで叩き続ける場合は、必ず成功可否をチェックし、
(少なくともスクリプトの頭でチェックし)失敗している場合は無理に叩き続けないようにしましょう。
起動猶予時間を使えば脱出は可能ですが、半分文鎮みたいになります。


参考になれば幸いです。

ほかいろいろ
https://sites.google.com/site/gpsnmeajp/electricmemo/flashair

あわせてこちらもどうぞ。
FlashAirからfa.requestを投げる時の注意
FlashAirでLuaスクリプトを組む時のコツ
fa.spiの挙動(秋月 FlashAir DIP IOボードキットでfa.spiが動かない問題)
#FlashAir をいじっている記録
FlashAir上でLuaスクリプトのエラーを表示する

おすすめ
FlashTools Lua Editor (FTLE)
posted by gpsnmeajp at 22:16| Comment(1) | TrackBack(0) | 未分類

2016年06月25日

FlashAirのレジスタから時刻を得る


libFlashTimeでは、現在時刻の取得にファイル書き込みをして、
その更新日時を取り出すということをしていた。

当然、フラッシュに書き込みが発生するので、寿命が縮む。

しかし、最近更新されたFlashAir開発者サイトのレジスタマップを確認すると、
ReadStatusRegで取り出せる情報の中にDate,Timeがあることに気づいた。

ので実装。

DL = string.sub(fa.ReadStatusReg(),225,226)
DH = string.sub(fa.ReadStatusReg(),227,228)
TL = string.sub(fa.ReadStatusReg(),229,230)
TH = string.sub(fa.ReadStatusReg(),231,232)
z = tonumber(DH..DL..TH..TL,16)
Year,Month,Day,Hour,min,sec = t.GetLocalTimeFromFATtime(z);
print("RegTime "..Year.."/"..Month.."/"..Day.." "..Hour..":"..min..":"..sec.."");

これで、フラッシュに書き込むこと無く、時刻を取得できる。

おわり。
後々、libFlashTimeに関数として実装する予定。
posted by gpsnmeajp at 00:32| Comment(0) | TrackBack(0) | 未分類

2016年06月24日

PebbleのアプリをC言語とPebble.jsで開発する時の違い

スマートウォッチのPebbleを便利にしているのは、通知機能とアプリである。
アプリはストアで配布されているが、自分好みのものがないということはよくあることだ。

開発環境はCLOUDPEBBLEを使えば何の問題もない。

オフラインで開発しようとすると、Linux仮想マシンにSDKを導入する必要があるが、
CLOUDPEBBLEを使えばオンラインで、Webブラウザ上で全てが完結する。
コンパイルも、エミュレータも、Pebbleへの転送もだ。

スマートフォンのPebbleアプリに、Developer機能が付いているので、
同じPebbleアカウントでログインしていれば、
クリックひとつでコンパイルされたアプリが手元のPebbleに自動でインストールされる。

ところで、問題がひとつ。
Pebbleのアプリを書く手段というのは、3種類ある。

・C言語で開発する
・Simply.jsで開発する
・Pebble.jsで開発する

の3種類だ。
この3種類の違いが個人的にわかりにくくて困ったので、メモをしておく。


・C言語で開発する
Pebbleにおける標準的な開発方法だ。
すべての機能を活かすのなら、これを使うしか無い。
文字盤(ウォッチフェイス)を作成できるのもこれしかない。

ウォッチフェイスのサンプルデータはここにある。

プログラムの実行速度は高速で、
使える機能は多く、
そして、省電力でもある。

また、一度インストールが済まされていれば、
スマートフォンと切断されていても(機内モードでも)アプリは動作する。

問題があるとするなら、C言語なので面倒が多いことだ。
配慮はされていて作りやすいが、割りと手間がかかる。

特に、スマートフォンアプリとの通信PebbleKitや
Pebbleアプリに読み込ませたJavaScriptのPebbleKitJSと通信するあたりが、
ちょっと面倒なように思う。

外部(サーバーなど)との通信もPebbleKitか、PebbleKitJSを経由する必要がある。


・Simply.jsで開発する
C言語での開発が面倒なので作成された「アプリ」である。
アプリの設定画面からURLを指定すると、
そのURLの先のJavaScriptを読み込んで実行する。

画像表示などの機能が使えないが、
UI機能は概ね使えるし、通信もajaxで簡単。

しかし、あくまで他人のアプリの上で動く。


・Pebble.jsで開発する
Simply.jsを単体のアプリ化したものである。
公式機能のため、画像表示機能が使え、その他多くの機能が使えるが、
一部使えない機能があるようだ。

Simply.jsもそうなのだが、実体はPebble上にはなく、スマートフォン上のPebbleアプリで動く。
Pebble上にインストールされるアプリは、実質クライアントである。

どういうUIを表示するか、どういうアクションをするかは、
PebbleがBluetooth経由でスマートフォンに問い合わせ、
スマートフォン上のJavaScriptが返答、それをPebbleが表示、という仕組みになる。

ので、
 ・省電力ではない
 ・スマートフォンと切断されている状態では使えない
 ・ウォッチフェイスが作れない
 ・レスポンスが悪い
 ・まだベータ版
 ・たぶんストアでまだ配布できない?
という、一見利点がないように思えるが、

Pebble上のアプリとしては完成品で、それをJSから操作する形になるため、
 ・Cのように機種別に作り分ける必要が(あんまり)ない
 ・かなり手軽にアプリが組める
 ・ajaxを用いてかなり容易に外部と通信できる
 ・C言語の面倒臭さがない
という大きな利点がある。

こんなのが作れる。


・結論
省電力で作りたい、ウォッチフェイス作りたい、
単体で動いて欲しい、レスポンスがいいのがいい、
ばりばりアニメーション/ゲーム作りたい、
という場合には、ネイティブC言語開発。

スマートウォッチらしく、スマホとつながっている時だけ動けばいい、
ネットから情報を取り出したい、送りたい、
とりあえず動けばいい、
という場合には、Pebble.jsがおすすめ。
もちろんのこと、Cでできないことはないです。







posted by gpsnmeajp at 23:17| Comment(0) | TrackBack(0) | 未分類

2016年06月19日

コスプレーヤーの衣装用電飾基板を作成した

とある知人のコスプレーヤーに「色が変えられて、RGBのLEDが30個くらい駆動できる
(全部同じ色でいい)イルミネーション基板がほしい」と言われたので、
ささっと作った記録を上げておく。

わりと検索しても出てこないので。



要件
・RGB-LED x30 = (20mA x3=) 60mA x 30 = 1.8A(各ch 600mA)の制御に耐えられるようにする。
・電源を別に背負うのも、電池というのもあれなので、モバイルバッテリー供給とする。
・簡単にプログラムがいじれるようにArduino Nano(依頼者のもの)を使用する。
・ボタン2つで色が変えられるようにする。
・デバッグが容易なように、基板上にスイッチとモニタ用LEDを付けておく。
・保護回路は省略。モバイルバッテリーの保護頼みである。

工夫
・MOS-FETでLEDを駆動するため、電源が許す限りかなりの量をつけられる。
 (正直オーバースペックだったと思う)
・電源分離用のジャンパを付けてあるため、マイコンの電源がLEDに振られてリセットされるようなら
 Arduino Nanoに付いているUSBコネクタから別途電源供給することで動かせるようにしている。
・LEDのパターンは色相を回すことにした。一番実装が楽だったので。
・Arduinoの浮動小数点演算は割と酷く遅くはないことがわかった。
・PWM出力複数付いているのは本当にいいことだと思う。


回路図

部品表

品名 単価 数量 小計 URL
角型フルカラーLED OSTA71A1D−A アノードコモン (10個入) 450 4 1800 http://akizukidenshi.com/catalog/g/gI-01444/
NchパワーMOSFET 2SK2232(60V25A) 100 5 500 http://akizukidenshi.com/catalog/g/gI-02414/
基板取付用USBコネクタ(Bタイプ メス) 50 2 100 http://akizukidenshi.com/catalog/g/gC-00161/
ピンヘッダ (オスL型) 1×40 (40P) 50 1 50 http://akizukidenshi.com/catalog/g/gC-01627/
分割ロングピンソケット 1x42 (42P) 80 1 80 http://akizukidenshi.com/catalog/g/gC-05779/
タクトスイッチ(黒色) 10 8 80 http://akizukidenshi.com/catalog/g/gP-03647/
絶縁ラジアルリード型積層セラミックコンデンサー0.1μF50V2.54mm(10個入) 100 1 100 http://akizukidenshi.com/catalog/g/gP-00090/
電解コンデンサー10μF50V85℃ (ルビコンPK) 10 3 30 http://akizukidenshi.com/catalog/g/gP-03116/
カーボン抵抗(炭素皮膜抵抗) 1/4W 1kΩ (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25102/
カーボン抵抗(炭素皮膜抵抗) 1/4W 100Ω (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25101/
カーボン抵抗(炭素皮膜抵抗) 1/4W 180Ω (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25181/
カーボン抵抗(炭素皮膜抵抗) 1/4W 220Ω (100本入) 100 1 100 http://akizukidenshi.com/catalog/g/gR-25221/
Arduino Nano 0 在庫品を利用
送料 500
合計 3640


操作方法
スイッチA短押し カラーパターン インクリメント
スイッチB短押し カラーパターン デクリメント
スイッチA長押し 常時点灯・点滅切り替え
スイッチB長押し 消灯切り替え
スイッチAB長押し 設定リセット

カラーパターンはEEPROMに記録され、次回起動時も再現される。


プログラム
※表示されない場合は少し待ってください。それでもダメな場合はリロード



・後記
作ってから気づいたが、

エーモン RGBカラー LEDコントローラー 1854 エーモン工業 (amonkogyo) https://www.amazon.co.jp/dp/B00EXGS9FK/ref=cm_sw_r_tw_dp_q.HzxbDBYD8C6
に機能が似ている。
もっとも、こちらは点滅もしなければ、点滅パターンの調整やカスタマイズも効かない。

12Vの電源が用意でき、各chのLED駆動電流が500mAまでに収まり、
かつ点滅が不要ならば、こちらを買うと完成品が1200円程度で済むので、
そちらがおすすめである。

posted by gpsnmeajp at 13:18| Comment(0) | TrackBack(0) | 未分類

2016年06月03日

Windows10にしたらやたら音飛びするときに軽減する方法

Windows8.1までは問題なかったのに、Windows10にしたらやたら音飛びするときに軽減する方法。

ほとんどこのページの引き写しですが。
https://wp.bmemo.pw/128

LatencyMonおよび、DPC Latency Checkerを入れてチェックしてみる。
たいてい、音が飛ぶ瞬間に赤色になるはず。

解決方法としては、デバイスマネージャから、デバイスを片っ端からオンライン更新を書けた。
Realtekのオーディオ、LAN関係や、Intelの色々が更新された。

追加で、無駄に色々入っていたイーサネット関係を、1つを残して無効化。
これで少しましになったきはするが、平均値は高いままだ。

どこかに問題があるのであろう雰囲気はする。
Win8.1では問題なかったのだがなぁ...

追記2017-08-17
クリーンインストールで治った。うーん、しょうもない。
posted by gpsnmeajp at 23:34| Comment(0) | TrackBack(0) | 未分類

2016年04月03日

Wi-Fi経由でIOポート入出力(LED点灯やスイッチの確認)をする手段としてのFlashAirの使い方

※簡単な電子回路の知識があることを前提としています。
 例えば、オルゴールICにスピーカーを繋いで鳴らせる程度。

USBでなんかIOポートを操作したい、となったら、Arduino+Fermataが一番おすすめですが、
Wi-Fi、それもスマートフォン等と組み合わせたいとなったら、FlashAirがおすすめです。
ESP8266が価格の面ではまさりますが、FlashAirは最初からWebサーバー機能などが
乗っているため、いろいろなセットアップの手間が省けます。


1. 秋月で部品を買う。
 秋月電子通商で以下のものを買います。
 ブレッドボードや、はんだこで等も、無かったら買ってください。
 (IOボードキットの端子の組立にハンダとはんだこでが必要です。
 電源は5V〜9Vをおすすめします。単三電池4本でOKです。
2. FlashAirのアップデートをします。
 こちらから、アップデータをダウンロードして、インストール。その後、実行して下さい。
 これをしないと、FlashAirの機能の一部が使えません。というか、これからの手順が失敗します。

3. AE_FAIO_HTTP_IO
 FlashAirに、ここからダウンロードしたzipファイルを解凍して突っ込む
 
4. FlashAirを、IOボードキットに差し込み、電源をつなぐ。
 PCやスマホから、FlashAirという名前のアクセスポイントに繋ぎます。
 パスワードは「12345678」

5. 自動セットアップ
 ブラウザでhttp://flashair/にアクセスすると、
 AE_FAIO_HTTP_IOというフォルダの中に、setup.luaというのがあります。
 ので、実行すると、FlashAirの一部の設定を自動でやってくれます。

6. さあためそう。
 指示の通り、一旦FlashAirを抜き差ししてから、再度PC・スマホを接続します。
 あとは、AE_FAIO_HTTP_IOの中のhelp.htmを見てみてください。
 そこから、IOポートの操作ができます。
 ただのリンクなので、HTMLでもjavascriptでも、アプリから操作OKです。 

posted by gpsnmeajp at 19:15| Comment(0) | TrackBack(0) | 未分類

2016年04月02日

秋月FlashAir DIP IOボード(AE-FAIO)の入出力テスター作った。

※テストじゃなくて、自作のHTMLやjavascriptからIOポートアクセスしたい人はこちら
 https://sites.google.com/site/gpsnmeajp/electricmemo/ae_faio_http_io

秋月FlashAir DIP IOボード(AE-FAIO)の入出力をテストするのって、
FlashAir以上に面倒です。(Luaスクリプトを書かなければならないため)

ので、FlashAirのcommand.cgiと同等のIOポート操作ができる"FAIOcommand.lua"と、
それを元に動く、GUI上でIOポート操作ができるIO_TEST_FAIO.htmを作りました。

FlashTools IO Testerと同じですが、それのcommand.cgiをFAIOcommand.luaに置き換えただけです。
無駄に5pin対応していますが、AE-FAIOには0-3ピンしか無いのでその点もご注意を。

この辺がgdgdなので、とりあえずアルファ版としてblog上公開にしておきます。



https://sites.google.com/site/gpsnmeajp/IO_TEST_FAIO.zip

不具合等ありましたらお知らせください。
(ページ下部のリンクが切れてるのは単に直してないだけです)
posted by gpsnmeajp at 15:14| Comment(0) | TrackBack(0) | 未分類

2016年04月01日

Windowsのログオン画面/ログオン認証を自分で作りたい/自分の作成した認証方式を使いたい場合に調べるキーワード

このへんの話、目的のキーワードにたどり着くまで非常に時間掛かったので、メモ。

WinXP
 GINA
 Graphical Identification and Authentication

Windowsの認証方法をオープン・ソースで代替してみよう 

WinVista以降
Credential Provider
Logon and Authentication Technologies: Logon and Authentication
https://technet.microsoft.com/en-us/library/cc780455(v=ws.10).aspx

カスタム Credential Provider の開発 https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2011/04/22/credential-provider-2/

カスタム Credential Provider で自動ログオンを行う方法 https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2011/08/17/credential-provider/

Vista/Winows7のログイン画面カスタマイズ
http://d.hatena.ne.jp/festiva1300/20091129/p1

デザイン至上主義プログラマー: 資格情報プロバイダーの話 http://komaoh.blogspot.com/2014/09/blog-post_8.html?spref=tw

IConnectableCredentialProviderCredential の利用 https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2012/03/15/iconnectablecredentialprovidercredential/
posted by gpsnmeajp at 16:30| Comment(0) | TrackBack(0) | 未分類

2016年03月27日

Pebbleを使って78日目

今日初めて、バッテリー切れモードの画面を見ました。
私のPebble Timeの使い方だと、標準で5日くらい持つので、見るのが難しかったです。
Battery+を導入していると、残り1日や残り半日などで通知が来るので、
その時点で充電すれば良いので。

今回はあえて、電池消費の大きいアプリを動かし続けて見てみました。
これは、Bluetooth接続やアプリなどの機能を殺して、バックライトのみ動作するモードです。
この状態でさらに1週間持つとかいう話です。


Pebbleを使い始めてわかったのは、意識しないということです。

私は勤務中などは腕時計をしてますが、家に帰ると机の上に置くので、
その時に充電するくらいで、それ以外は至って普通に腕時計として機能しています。
防水だし。少し汚れたら洗います。指紋がつくと若干見にくいのは残念ですが、拭けばよし。

私の意識としても、腕時計です。本当に。カシオの腕時計を眺めているのとさほど変わらない。
意識を邪魔しないでくれます。電子ペーパー液晶のおかげで画面は常に表示されているし、
暗ければ腕を振ればバックライトを付けてくれます。ここもカシオの腕時計と何ら変わらない。

ただ、日常で一日に数回から十数回、スマートウォッチとして仕事してくれるときがあります。

・朝の天気予報のプッシュ通知を表示するとき
 (最近Yahoo天気の仕様が変わって、絵文字表示になったのが残念)
・ニュースを表示するとき


・メールやLINEが来た時


・リマインダーが起動した時
・サーバーからの通知を受け取った時

・Twitterで反応された時


・2段階認証するとき

・時間測りたい時

・カレンダー見たくなった時
・音楽を聞いている時(Bluetoothヘッドフォンをしている時、放送機材に接続している時などは特に)

・バッテリー残量が気になった時
・メトロノームが欲しくなった時

・月齢が知りたくなった時

・方位が知りたくなった時
 ・機内モードやマナーモードにしたくなった時

それ以外は、至って腕時計です。なにも邪魔しない。

睡眠中はPebble側で設定したおやすみモードが動作するので、通知はなりません。
画面に表示はされるけれど。
iPhoneのおやすみモードやマナーモードとは独立して動くのでそこは注意です。

当初は色々アプリを入れてましたが、3ボタンではできることに限りがあるし、
スマートフォンでやったほうがいいことも多い。
しかし、これらに関しては、腕時計でできると便利だったので、愛用しています。
特に通知に関しては効果絶大で、スマートフォンを取り出す回数は激減しました。

まあ、私が一番好みなのは、壁紙を好きなものにできて、
常時表示されているのでいつでも見れることですが。
二次元好きな方にはおすすめです。


posted by gpsnmeajp at 15:06| Comment(0) | TrackBack(0) | 未分類

2016年03月26日

FlashAirの開発ボード Airio や AirioRP 、秋月のボードがPC(Windows)で認識されない場合

Q. FlashAirの開発ボード Airio や AirioRP 、秋月のボードがPC(Windows)で認識されない

A. それらのボードについてるUSBポートは電源供給用です。
 PCに差し込めますが、5V取り出すだけで、認識されることは一切ありません。
 また、安全のため、モバイルバッテリーや、USB充電器、セルフパワードハブなど、
 PCや大切な機器以外で使用することをおすすめします。
posted by gpsnmeajp at 22:38| Comment(0) | TrackBack(0) | 未分類