時には立ち止まってみるのもいいよ

仕事の合間の息抜き。やってることは仕事と同じ。

接話型マイク

仕事で定期的に、Skype (for business)を使って遠距離の客先と電話会議するんだけど、その時に使ってたのがマイクと片耳イヤホンが一体化したやつ。

f:id:poiuy56:20170913200846j:plain←これ。

 

カナル型じゃないので耳が小さい自分にはかなり苦痛で、マイクも何故かノイズが乗りまくってました。

 

 

で、文句たらたら言ってたら上司がアタラシイの買っていいよっていうから、

アタラシイの買っていいよっていうから、

(大事なので2回言った)

 

f:id:poiuy56:20170913193645j:plain←アタラシイの!!

 

ひゃっほい! なんかヘッドホンぽいのついてるけどただの固定具!!

マイクのみ。

audio-technicaのAT810Fです。

 

で、これが接話型

Wikipedia「マイクロフォン」によると

接話型マイク:

口元に極近いところで利用することを前提に指向特性、周波数特性、感度を調整し、目的の声以外の音を拾いにくくしたマイク

 だそうで、社内で通話するとどうしても外の音とか他の人の会話を拾ってしまうので、これなら!と思った次第。

 

f:id:poiuy56:20170913202711j:plain

まぁ結論から言うと、周りの声は拾います。多少。

そりゃそーだわな。

でも

  • ノイズは明らかにかなり小さくなった。なくなったとは言わない。
  • 外の車の音とかエアコンの音なんかはかなり軽減されてる。と思う。
  • 自分の声がクリアに聞こえる。前のは結構くぐもった感じだった。

なかなか良い感じですよ!

 

動画作ったりする人ならマイクアンプ通してレベル上げたりした方がいいかもだけど、Skypeくらいなら十分なり。

 

あと、ヘッドホンみたいに見える固定具は、たぶん頭の後ろに回して使う感じ。

それだと頭にがっちり固定されて、マイクの位置がビシっと決まる。

オーテクの製品ページには

ハンズフリーでアクション自由。激しい動きに強い機動性と高感度。

って書いてて、確かに少々動いてもずれ無さそう。

でもね。5mのケーブルぶら下げてアクション自由もないだろ、とツッコミを入れた人は多いはず!

 

さて、そんなガッチリをアピっておきながら何ですが、頭がデカイ自分はその使い方だと左右のパッドがちょうどコメカミあたりで、しかも締め付けが結構きつかった。

そうすると、首かけするのが良い感じなんだけど、それだと逆に全く締め付けないので「アクション自由」ってわけにはいかない。動くとすぐマイクがずれる。

あ、会議用だから動かないし良いのか。良いな別に。首かけで。

 

さあ次の会議もがんばるぞー(棒

 

ということで、良い買い物をしました(買ってもらった)って話でした。

 

この手の説話型のちゃんとしたマイクの付いたヘッドセットが売ってたら、売れると思うんだけどなぁ。

 アフィリものっけときますのでよろしければ。こっちのマイクアンプもお勧めです。

 

 

WM_USERとWM_APPとRegisterWindowMessage

Windowsのアプリケーションで独自のウインドウメッセージを使う際、

  • WM_USER+?
  • WM_APP+?
  • RegisterWindowMessage

のどれを使うのか、正しい使い分けって知ってましたか?

私は今知りました!!

 

今まではなんとなく、「どうやらWM_USER+?はUSERコントロールが使ってるらしいから、アプリ開発では使わないほうがいい」とどこかで聞いた気がして、WM_APP+?を使っていたのですが。

 

MSDNの説明を読めばよく分かりました。

 RegisterWindowMessage 関数

 

複数のアプリケーションが共通のメッセージを処理する必要がある場合に限って、RegisterWindowMessage 関数を使ってください。1 つのウィンドウクラス内でプライベートメッセージを送信する場合、アプリケーションは WM_USER(0x0400)~0x7FFF の範囲の任意の整数を使うことができます。(この範囲内のメッセージは、アプリケーションではなくウィンドウクラスにとってプライベートです。たとえば、BUTTON、EDIT、LISTBOX、COMBOBOX のようなあらかじめ定義されたコントロールが、この範囲内の値を使うことがあります。)

 

つまり、そのメッセージの機能とその使用範囲で決めればいいわけです。

  1. 自前のWindowクラスで作ったウインドウ固有の機能なら
    そのWindowクラス毎に決めたWM_USER+?を使う
  2. ウインドウクラスに依存しない、アプリケーション固有の機能なら
    そのアプリケーションに決めたWM_APP+?を使う
  3.  複数のアプリケーションで使う機能(外部に機能を公開するような)なら
    RegisterWindowMessageを使う

 

RegisterWindowMessageの説明にある「複数のアプリケーション」というのはおそらく、複数のプロセスとかいう意味じゃなくて、見知らぬアプリケーションに対して自分のアプリケーションが持つ機能を公開する際に使用するのだと思います。

 

 

 

まぁ、結局WM_APPを使うことになるんだろうけど!! ← 

Windows10 のロック画面画像が変わらない件(解決)

知ってる人には今さら、かもしれませんが。

 

Windows10のログイン画面とかロック画面で、Microsoftのおすすめ画像がでる「Windowsスポットライト」というのがあるんですが、なんかのはずみで画像が切り替わらなくなってしまったのです。

Microsoft(JP)のフォーラムでも質問が出てますが何かイマイチな回答しか得られず。。

 

実害が無いので放っておきたかったんですが、どうにもそこの写真が気に入らなくて、いろいろ探したらわかりました。

 

ちょっと特殊なファイルを削除するので、いつものように自己責任でお願いいたします。m(_._)m

 

  1. スタートメニュー→設定(歯車アイコン)→「個人用設定」→「ロック画面」を表示
  2. 「背景」の設定を「画像」にかえる(スライドショーでもいいかも)
  3. C:\Users\poiuy56\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_XXXXXXXXXXX\Settings
    のフォルダを開いて、中にあるファイルを消す。
    ※ poiuy56のところは自分のユーザー名です
    ※ XXXXXXXXのところはランダムな英数字みたいです
  4. 「ロック画面」の設定で「背景」を「Windowsスポットライト」に戻す

 

まぁ想像するに、スポットライト画像を変更しないようにするロックファイルが保存されてて、そいつが何らかの原因で消すタイミングがなくなって、変更できないままになってるんじゃないかと。

 

元ネタはこちら↓

 

answers.microsoft.com

マストドン v1.4の悲劇 (CentOS7+非Docker)

流行ってんだか流行ってないんだかよくわからないマストドン

 

思うところあってインスタンスを立てようとしたらハマったのでメモ。

#Dockerな人たちはこういう問題は起こらないのかな?

 

まっしろ現象

ver1.4 にしたら↓こんなことになっちゃった人むけ。

画面真っ白。

f:id:poiuy56:20170619203934p:plain

 

原因

github.com

ここら辺の話が元で、要するに /home/mastodon/live/public を読めなくなるってことです。

パターンとしてはたぶん2つあって、

  1. nginxを使ってる → /etc/nginx/conf.d/mastodon.conf の設定 or /home/mastodonパーミッションの問題
  2. nginxを使ってない → これはどうしようもないけど RAILSの設定を変えれば回避可能

 

nginxを使ってる場合

v1.4になったあたり(たぶん)でproduction_guideの記述が変わってて、nginxの設定ファイルが以下のようになっています。

location ~ ^/(packs|system/media_attachments/files|system/accounts/avatars) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }

v1.4で静的なファイルが public/asset から public/packs とかにかわってるので、それの対応です。

 

古いproduction_guideの記述だとここの記述がなかったりパスが違ってたりして、その場合はnginxがrailsに丸投げしてて、rails側で静的なファイルを出していたようです。

 

で、v1.4に変わったときにrailsが静的ファイルを出さなくなったもんで、エラー(404)になると。

上のlocationがあると、railsに渡す前に nginxが静的ファイルを配信してくれるので、うまいことやってくれます。

 

locationちゃんと書いたけど動かねーよ!!

という人は私でした。

普通にadduser mastodon してたので、/home/mastodon の権限が0700になってて nginxからは見えなかったという初心者オチでしたよ orz

 

nginx使ってない場合

IISとか、別のサーバーからプロキシしてるパターンですね。

結局現象としては上と同じで、railsが静的ファイルを配信してくれないのが原因です。

 

おそらくセキュリティ的な問題とかでわざと静的ファイルを出さないようにしてると思われますので、以下の解決方法は推奨されないと思います。自己責任にてお試しください。

 

で、件のissueに回答している人のコメントから得た答えがこちら。

RAILS_SERVE_STATIC_FILES=true 

 これを .env.production に1行加えればよろしい。

 

これで静的ファイルを配信してくれます。めでたしめでたし。

 

 

Raspberry Pi 3 の電源は本当に2.5A必要なのか?

 

前書き

結論から言ってしまうと、以下で書いているのは、RasPi3でもUSBには2.5Aも必要ないんじゃないか、という趣旨の記事です。が、当然使用環境などによって動作条件は変わってきますので、動作に問題がでたり故障したりしても補償できませんので自己責任でお願いします。

 

で、本題

Raspberry Pi 3が2月末に本国でリリースされてから、ようやく技適が通って日本国内でも販売が開始され、ボクのところにも先日実機が届きました。

 

で、本国リリース時からネット上で「電源容量は2.5Aを推奨」とか言っていたので、基本的にビビリな自分はあらかじめ

 

 

 こんなのを購入していたわけです。

 で実際に起動して測ってみると、

RasPi2もPi3も、消費電流は大して変わらんゾ?

という結果に。

具体的に言うと、有線LAN接続でBTも使わない状態で、

  • Raspbianを起動してGUIが立ち上がってる状態で5.1V/0.23~0.25Aくらい
  • ウインドウをグリグリ動かすと、Pi2で0.30~0.35, PI3でも最大0.40Aくらい
  • omxplayerでのFullHD H.264 MP4動画再生はどちらも0.30A以下。

てな感じでした。

これって、普通に1AのACでいけるんじゃないでしょうかね。。

 

ソースは?

2.5A必要!っていう話の元の記事ってたぶん↓これかなと。

www.raspberrypi.org

ここに書かれている文書を引用すると、

All of the connectors are in the same place and have the same functionality, and the board can still be run from a 5V micro-USB power adapter. This time round, we’re recommending a 2.5A adapter if you want to connect power-hungry USB devices to the Raspberry Pi.

の部分じゃないかと思うんですが、拙い英語力で理解した感じでは

USBに大消費電力のデバイスを差したい場合は2.5Aのアダプタを使うと良いよ

 

と言っているだけのような気が。

この記事のコメントで、Raspi公式のひと?(コメント欄にロゴが付いてる)の曰く、

There is only one recommended power adapter, the 2.5A Raspberry Pi power adapter. But the power consumption is based on 1A to the processor plus 0.3A to the WiFi plus 1.2A to the USB

These are peak values only but of course you can easily get close to those numbers playing software decoded video for example (youtube on chromium!)

だそうなので、まぁ確かに2.5Aを推奨はしていますが、普通に使う分には全然ヨユーじゃないのか、と思う次第です。

 

USBカメラでキャプチャしながらOpenCVで画像解析とか、そういうのだと影響あるかもしれませんね。

 

 

 

AndroidStudio 1.4 + JNI

AndroidStudio1.4でJNIをつかう方法の覚書。

1.3版を書いてる間に1.4がリリースされたのでその辺の記述も。

ってほとんど同じですけd。

 

元ネタはこちら→

Experimental Plugin User Guide - Android Tools Project Site

 

 

1. experimentalなプラグインが必要。

NDKをつかうためのプラグインはGradle2.5が必要なので、その辺も含めて設定をいろいろいじります。何かダウンロードしてインストールする、というわけではありません。

Gradle2.5 + NDK r10e + SDK Build Tools 19.0.0以上が必要です。

  • {PROJDIR}/gradle/wrapper/gradle-wrapper.propertiesファイルを編集して、distributionUrlをgradle-2.5に変更する
    変更後)
      distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-bin.zip
  • {PROJDIR}/build.gradleのクラスパスを変更する
    変更後)
      classpath 'com.android.tools.build:gradle-experimental:0.2.0'
  • {PROJDIR}/.idea/gradle.xmlにgradleHomeオプションがあれば、消す。
    変更前)
    <option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.4" />
    ※これに気が付くのにえらい時間がかかった。。
2. Gradle Scripts の変更

元ネタサイトのまとめを適当に日本語化すると、こんな感じ。

  • プラグイン名を"com.android.model.application"に変更する
  • 設定は model {} で囲む
  • ほとんどのプロパティは = で記述する(以前はスペースのみ)
  • Collectionへの追加は += で記述する(proguardんとこの話)

が、いくつか限定条件があって、

  • buildTypes, productFlavors, signingConfigs は android{} ブロックの外に出す
  • android {}ブロックの中にネストされている項目には with キーワードをつける
  • プロパティ値として設定できるのは direct types のみ。
    ※ minSdkVersionとかproGuardFilesの話だと思います。
  • buildTypeやproductFlavorを作成するには create メソッドを使う必要がある。
    ただしrelease buildTypeのような既存のものは名前を指定するだけで使える。
  • dependencyのtestCompileコマンドは使えないようだ。
    ※ AndroidStudio1.4でやるとdependenciesにtestCompileが追加されますが、エラーで通りませんでした。よくわからんのでコメントアウト(^^; いいのか?

 

で、デフォルトのプロジェクトを書き換えたbuild.gradleがこちら。

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.0"

        defaultConfig.with {
            applicationId = "jp.poiuy56.project"
            minSdkVersion.apiLevel = 19
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
        }
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
}

 

ここらで一度Gradleを同期してみて、ビルドが通るか確認します。

Gradle-2.5 が読まれていれば、 {PROJDIR}/.gradle/2.5 が出来上がってファイルが配置されてるはずです。

 

3. Gradle Scripts (NDK用の追加設定)
  • {PROJDIR}/local.propertiesにndk.dirを追加。
    SDKLocationで設定すると追加されます。
    ndk.dir=C\:\\android-ndk-r10e
    sdk.dir=C\:\\android-sdk-windows
  • {PROJDIR}/app/build.gradle に android.ndk ブロックを追加
    android.ndk {
    moduleName = "jni-sample"
    CFlags += "-UNDEBUG"
    ldLibs += ["android","log"]
    stl = "stlport_static"
    }
4. JNIソースを追加する
  • appから右クリックで new -> Folder -> JNI Folder でjniフォルダを作成
  • jniフォルダに .c とかを置けばOK

後は普通にJNIですね。nativeメソッドを含むjavaクラスを作って、javahでヘッダ生成、んで中身を実装してjniフォルダに配置すれば、うまくやってくれます←

 

JNIのモジュールを複数に分けたりフォルダを分けたりする方法がよくわからんので今後の課題です。

 

 

 

ソフト屋さんがblueninjaをさわってみてます

前回の続きです。

 

 

TOSHIBAのBSPが入手できました。

思ったよりは早かったですが、署名を送り返す(メールで)作業が面倒ですねぇ。。

わざとかもしれませんが。

 

さて、無事BSPを入手できるようにはなりましたので早速環境を整えましょう。

AppLite | 東芝 セミコンダクター&ストレージ社

ここからTZ1000のBSPを入手します。アカウント登録後ライセンス許諾に署名して送り返すと、BSPがダウンロードできるようになります。

が、

f:id:poiuy56:20150826085934p:plain

なぜかChromeでは1回目のサインインがはじかれます。パスワードはお忘れではないです。

もいっかいやると入れるんですけど。

 

で、ライセンス許諾云々が完了していると、BSPやドキュメント類のダウンロードページが開くようになります。

 

現在(2015/8/26)BlueNinja開発環境として必要なBSPのファイルは、

  • TZ1000 BSP non OS Version for MDK-ARM

ですが、東芝サイトでは最新版が更新されていますので、一つ古いバージョンを取得する必要があります。

f:id:poiuy56:20150826090741p:plain

 

余談ですが、最初「新しいほうがいいじゃね?」と思ってLatestVersionをダウンロードしたら、関数のI/Fが変わっててビルドが通りませんでしたorz 人間の業ですね(ちがう

 

ダウンロードしたZIPファイルの中にある、「TOSHIBA.TZ10xx_DFP.1.31.1.pack」を、Cerevoのスターターガイドにあるように配置してインストールスクリプト(.BAT)を実行すると、おおむね準備完了です。

f:id:poiuy56:20150826091710p:plain

インストールしたらC:\Cerevo\CDP-TZ01B\に一式ファイルがコピーされます。

 

start.shell.batを起動すると、必要な環境変数を設定してコマンドプロンプトが開きますが、このBATファイルは

  • MinGW / MSYS のPATHはすでに通っている
  • GitはC:\Program Files (x86)にインストールされている

のが前提になっていますので、必要に応じてstart_shell.batファイルを書き換えましょう。#って、こんな記事を読んでる人は気づくと思いますけど。。

 

ようやく、環境がでけたので、とりあえずはサンプルをビルドしてみます。

 

start_shell.batを起動後、gitからソースを入手→makeします。

C:\Cerevo\CDP-TZ01B> cd \

C:\> mkdir work

C:\work> git clone https://github.com/cerevo/BlueNinja_BLE_EXAMPLE

Cloning into 'BlueNinja_BLE_EXAMPLE'...
remote: Counting objects: 125, done.
remote: Total 125 (delta 0), reused 0 (delta 0), pack-reused 125 Receiving object
Receiving objects: 100% (125/125), 132.63 KiB | 0 bytes/s, done.
Resolving deltas: 100% (48/48), done.
Checking connectivity... done.

 

C:\work> cd BlueNinja_BLE_EXAMPLE

C:\work\BlueNinja_BLE_EXAMPLE> make

  なんかいっぱい出る

C:\Cerevo\CDP-TZ01B\tools\bin\arm-none-eabi-objcopy -O binary blueninja_ble_example.elf blueninja_ble_example.bin

C:\work\BlueNinja_BLE_EXAMPLE>

うまくいけば、blueninja_ble_example.elfと.binができあがりです。