物理の駅 by onsanai

Physics-station 研究で日々感じたことを忘れないための備忘録

Visual Studio 2017 + OpenCV 3.2.0 + x64の初期設定 とOpenCVに関する質問の受け付け(コメント欄へ)

Visual Studio 2017 x64 で OpenCV 3.4.2 を使う方法

OpenCVをとにかく使いたい。けどNuGetは使えない、使いたくないっていう人のために、この記事の最終更新時点での最新版のインストール方法を書きました。2.4.Xの頃と比べて.libの数が減って設定が楽になりました。

最終更新:2018/08/29

OpenCVReleases - OpenCV libraryWin pack からダウンロードして展開済みだと想定しています。Visual C++の空のプロジェクトを作った状態で次に進みましょう。

f:id:onsanai:20180829173429p:plain:w300

続きを読む

Slackに投稿されたファイルを一括で削除するpythonコード

まずは、tokenをゲットせよ。

api.slack.com

次に、slackclientパッケージに入れる

pip install slackclient

クライアントのインスタンスを作る。pythonってインスタンスって言葉使うんだっけ?

from slackclient import SlackClient
slack_token = 'xoxp-**-**-**-****'
client = SlackClient(slack_token)

ファイルのリストを得る。

all_files = []
for p in range(1,1000):
    files = client.api_call("files.list",page=p)
    all_files.extend(files["files"])
    if len(files["files"]) == 0:
        break

こんな鮮やかじゃないコードなんていらないっていう人は、回れ右で帰ろう。もっとうまく書く方法はあるはずである。

client.api_call("files.list",page=p) ここが重要である。戻り値は辞書型になってるので、読めば分かる。あるユーザーのファイルだけ得たい場合は、 user="XXXXXXX" とかを引数に入れれば良い。

最後に、ファイルを削除してみよう

for file in all_files:
        ret = client.api_call("files.delete", file=file["id"])
        if ret["ok"]:
                print("OK")

これはテストではない。本当に削除される。だから、試しに・・・っていう人は本当に気をつけてね(泣)。

ハマったところとしては pageusername の扱い。

削除する前にページを走査して、ファイルリストを全て取得おこう。 files.list は非同期なので、削除しながらリストを得るとハマる。

username 。現代のSlackで username は存在しない。名無しの権兵衛ではなく、IDで管理されている。管理社会なのである。だから、特定のユーザーのファイルを削除したい時は file["user"] のユーザーIDで振り分けよう。

ユーザーリストは次のように得る。

users = client.api_call("users.list")
print(users)

pythonなんか分からないっていう人は、pythonぐらい勉強しろよと言いたいところだが、便利なリンクを用意しておく。ここではpythonを使わなくてもAPIが叩ける。

削除のAPIを叩くと警告なしで削除されるから本当に気をつけろよ。

Google 日本語入力 (Google IME)は複数のDPIディスプレイ使用に非対応

Windows 10で複数のDPIが対応してはや2年ほど経ったか。Chromeなどのブラウザもようやく複数のDPIディスプレイ使用に対応してくれた。

しかし、Google 日本語入力よ。君はいつになったら対応してくれるのかい?

現行の公式版 2.24.3250.0

f:id:onsanai:20190308131702p:plain

デベロッパー版2.24.3270.100

f:id:onsanai:20190308132222p:plain

どちらでも非対応なので、高DPIディスプレイと通常のDPIディスプレイを混在したとき、Windowsを起動した際にメインディスプレイだった方では変換候補が正しく表示されるが、それ以外では正しく表示されない。

ATOK IMEや、Microsoft IMEは対応しているが、ATOKは僕のタイピング速度に追いついてこないためダメ。Microsoft IMEは全ての数字入力を小文字に出来ないのでダメ。結局、変換候補が表示される場所を犠牲にして、Google IMEを使い続けてる、ということなのである。

英語の勉強

明記のない場合は全てロングマン現代英英辞典からの引用

resolve
to find a satisfactory way of dealing with a problem or difficulty 
目的語に誤差(errors)を取れるようだ。

numerous
many のカッコいい表現

present
to show or describe someone or something

The values were presented for 何か。で、値は何かに対して示された、という表現。

find
to discover, see, or get something that you have been searching for
The values were found to be 数値。 で値は数値であると分かった、という表現。

have
The values have small errors. で、値のエラーは小さい、という表現。

exhibit
to show something in a public place so that people can go to see it
show のカッコいい表現
The results for 何か exhibit large errors. で何かのエラーは大きかった、という意味。

dominate
to be larger and more noticeable than anything else in a place
The error are dominated by 何か。で、そのエラーは何かが支配的だ、という意味。

establish
to find out facts that will prove that something is true
The values were establishedで、その値は確立された、という意味。

specialized skillsで、特別なスキル

desired positionで、目標の座標

何か reduced the timeで、何かのおかげで時間短縮した。

perform
to do something, especially something difficult or useful
もの performed ことで、ものはことを行った。

By combining A with B AをBと組み合わせると、

screen
if something screens something else, it is in front of it and hides it
The events are screened で、 そのイベントはふるいにかけられた、という意味。

prior to 何か で、何かの前に、の意味。

モノ, known as 特殊な名前

irradiate 検出器 using ビーム

as improvement over こと で、ことの代わりの改善として、という意味。

a ten-fold greater number。なんでa ten-times greater numberにならんのや。

dimension
a part of a situation or a quality involved in it 
A4 sheet has dimensions of 210mm ☓ 297mm A4はこのサイズである。

investigate
to try to find out the truth about something such as a crime, accident, or scientific problem

調査する的な意味

as follows 次のように

as mentioned above 前に書いたように

corresponding to the value 値に対応して

corresponding value 相当する値

The maximum search area is 1-mm square. 最大1mm四方を探索する。

throughout
in every part of a particular area, place etc
ぜーんぶ

dedicated 専用の

identify
to recognize and correctly name someone or something
認識するは、recognizeではないことが多い。

employ
to use a particular object, method, skill etc in order to achieve something
The conditions employed in this work この研究で採用された条件
「使われた」的な意味の動詞。受け身で使うことも

double
something that is twice as big, as much etc as usual or as something else
2倍にした、という意味の動詞

 as denoted in Figure 1 図1で示すように

verify
to discover whether something is correct or true
visually verify で目視で確かめるという意味に。

A is positioned near B。で、AはBの近くに位置する。

remain
to be left after other things have been dealt with
remaining もの で、残ったものとか、他のものとか

display
to show something to people, or put it in a place where people can see it easily
The result displayed こと で、その結果はことを見せた。

match
if one thing matches another, or if two things match, they look attractive together because they are a similar colour, pattern etc
ことA matches ことB で、ことAはことBと同じであるという意味にもなる。

indispensable
someone or something that is indispensable is so important or useful that it is impossible to manage without them
絶対必要な

For future work, 将来の研究のために

proceed
to continue to do something that has already been planned or started
進む

filesystemを使ってディレクトリ(フォルダ)内にあるファイル等をリストしたりディレクトリを作成したり

VS2017の環境では、 /std:c++latest または /std:c++17コンパイルオプションに追加する必要がある。

#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;

int main(int argc, char** argv) {

    if (argc == 1)return -1;
    fs::path path1(argv[1]);

    //ファイルをリスト化
    if (fs::is_directory(path1)) {
        std::cout << "Directory: " << fs::absolute(path1).string() << std::endl;
        std::cout << "Files: " << std::endl;
        auto dir_it = fs::directory_iterator(path1);
        for (auto &p : dir_it) {
            std::cout << p.path().string() << std::endl;
        }
    }
    //ディレクトリを作成
    auto path2 = path1 / "new_dir" ;
    fs::create_directory(path2);
}

Visual Studio Code + Latex Workshopで、built-in diffを使ったときに左の画面でコピーができない

Cannot copy the text on left side of the diff window · Issue #1125 · James-Yu/LaTeX-Workshop · GitHub

Visual Studio Codeは、内蔵のdiffツールがあり、中々使い勝手が良い。

通常、左側に変更前の情報が描かれ、右側に変更後の情報が描かれる。

f:id:onsanai:20190121120836p:plain

この例では、 ,hidelinks という文字列を追加したということがひと目で分かる。

さて問題は、このdiffツールとLaTeX-Workshopの相性である。通常、左側の画面では文字列の 選択、コピー はできる( 貼り付け はできない)のだが、LaTeX-Workshop をインストールした状態では、カーソルが強制的に右の画面に移ってしまい、左の画面のテキストをコピーすることができなくなる。

いや、たぶんできるのだが、テキストを選択直後にカーソルが0.1秒程度で右の画面に移ってしまうため、人間の応答速度ではコピーは出来ないのである。

開発チームは99.9%そんな状況は再現しないと言い張っているが、私の環境や、私が管理している他のパソコン上では簡単に再現できたため、私の中では99.9%再現できる状況であると考えている。

というわけで、同様の状況を確認した人は、GithubのIssueに追記してもらえないだろうか。報告をお待ちしている。

Cannot copy the text on left side of the diff window · Issue #1125 · James-Yu/LaTeX-Workshop · GitHub

3G (WCDMA)のバンドリスト (関係国のみ)

Bands Egypt Greece Japan(Docomo) Japan(Softbank) US(T-Mobile) US(AT&T)
1(2100) - -
8(900) - - -
6(800) - - - - -
5(850) - - - - -
9(1700) - - - - -
2(1900) 終了? - - - -
19(800) - - - - - -
4(1700) - - - - - -
Bands MightySIM Nexus6*1 AirCard785 Aterm NR05LN CAT S41 Pixel 3 iPhone X
1(2100)
8(900) -
6(800) - - -
5(850) -
9(1700) - -
2(1900) 終了? - - - -
19(800) - -
4(1700) - - - -

*1 グローバル版

アメリカで1900MHzが終了していると連絡を受けています。

Microsoft フォトの動画(ビデオプロジェクト)のプロジェクトファイルの保存場所について

Microsoft フォトは、画像から簡単なムービーを作成する機能が充実している。

しかし、クラウドではなくローカルに保存した場合(特に何もしなかった場合)は、ムービーの設定を保存するためのプロジェクトファイルは自動でローカルに保存される。しかし、ユーザーがそのファイルを明示的に知る手段はなかった。

先日パソコンがクラッシュした際にWindowsの初期化をしたのだが、作成していた動画(ビデオプロジェクト)が消されてしまって困った。しかし色々調べていくと、復活させられる可能性があることがわかった。

初期化をした際に過去のアプリケーションデータは

C:\Windows.old\ に保存されている。

フォトのムービーデータはC:\Windows.old\Users\Masahiro\AppData\Local\Packages\Microsoft.Windows.Photos_8wekyb3d8bbwe\LocalState に保存されている。どのファイルがムービーのプロジェクトファイルか分からなかったため、全てのファイルを現行のフォルダに上書きコピーした

C:\Users\Masahiro\AppData\Local\Packages\Microsoft.Windows.Photos_8wekyb3d8bbwe\LocalState

これで、作りかけのムービーが復活できた。

ユーザー名は適宜自分のものに置き換えられたし。

Linux シェルスクリプト1行でSlackに投稿する

Custom Integrations でWebhookを取得しているものとする。

custom-integrationsの場所がわからない人は、下記のURLを自分のチーム名に変えてくださいな。

https://sample-team.slack.com/apps/manage/custom-integrations

で、Webhook URLを取得する。

f:id:onsanai:20181214164844p:plain

で、curlで叩くだけ。簡単だね。

curl -X POST -H 'Content-type: application/json' --data '{"text":"This is a pen."}' https://hooks.slack.com/services/XXXX/XXXX/XXXXXXXX

exeのfull pathとDLLのfull pathを得る方法

tbb.dll (例)のフルパスを得る方法と、実行中のexeそのもののフルパスを得る方法

char path[2048];
GetModuleFileNameA(GetModuleHandleA("tbb.dll"), path, 2048);
cout << path;

GetModuleFileNameA(NULL, path, 2048);
cout << path;

pathに日本語名が入っている時? 知らん。そんな場所にDLLを置くな。

Twitterの公式ウェブブラウザの検索画面で「i」「j」コマンドを使ったときにツイートが隠れてしまう問題を解決する方法

Twitterの公式ブラウザは、ショートカットキーを使えてツイートを次々と送るときに「i」「j」のコマンドがたいへん便利である。 コマンド一覧は「Shift+?」で出てくる。

しかし、検索画面では残念なことに「i」「j」コマンドを使うとツイートの半分がタブに隠れてしまう。こんな感じに。

f:id:onsanai:20181207220146p:plain:w300

スタイルシートを自分でいじることで、この問題を解決した話。使っているのはChromeのstylebotという拡張機能

chrome.google.com

インストールして「twitter.com」に対して次のように設定する

div.Grid-cell li.selected-stream-item {
    padding-top: 80px;
}

隠れてしまうツイートの上部に空白を入れることでこれを解決出来る。解決した後はこんな感じ。

f:id:onsanai:20181207220718p:plain:w300

もう少しスマートに記述できる方法があれば教えてほしいです。

ちなみに、広告を消す方法

.promoted-tweet {
    display: none;
}
.promoted-trend {
    display: none;
}

ツイート画面を左に持ってくる方法

.content-main {
    float: left;
}
.dashboard {
    float: right;
}

おすすめユーザーとかを消す方法

div.dashboard-right {
    display: none;
}

プロフィールを消す方法

div.DashboardProfileCard {
    display: none;
}

自分のアイコン画像を消す方法

img.top-timeline-tweet-box-user-image {
    opacity: 0;
}
img.Avatar {
    opacity: 0;
}

キッチンのコンピューター 仕事用コンピューター の怪

Windowsでは、システムのプロパティのコンピュータ名の設定画面において、コンピューターの説明の例として次のように記述されている。

f:id:onsanai:20181122123851p:plain:w400

例: "キッチンのコンピューター"、"仕事用コンピューター"

僕の記憶では、これはWindowsXPの時代から存在している。仕事用コンピュータは分かるが、キッチンのコンピューターとは何だろうか。キッチン置くコンピューターの目的は? 濡れないの?

謎である。

Python3でROOT+C++と同様にフィッティングとパラメータの標準誤差を算出する

まずはCERN ROOT + C++ で実装する。

お手本通り、平均値0、標準偏差1、ガウス分布(正規分布)に沿う乱数を10000個作り、ROOTのヒストグラムに詰め、 TF1ガウス分布 gaus でフィッティングした。オプション等は何もつけていない。\chi^{2}も普通に結果を引用した。 f:id:onsanai:20181121013431p:plain:w500

Constant 402.531 +/- 4.95816
Mean     -0.00397889 +/- 0.00989405
Sigma    0.983115 +/- 0.00704207
Chi2     83.6418

次に、全く同じデータを使うために出力しておいたテキストデータを使って、 scipy.optimize.curve_fit でフィッティングさせる。 テキストデータはC++で発生させることが可能だが、C++コンパイル環境がない人のためにファイルも提供する。

ガウス分布のフィッティング用のサンプルデータ

ガウス分布の式は自分で作成し与えた。また、\chi^{2}scipy.stats.chisquare を使って計算した。ここでポイントは、誤差を適切に与えることである。ビンあたりのエントリー数Nに対して、誤差\sqrt{N}の配列を curve_fitsigma に与えるとよい。

f:id:onsanai:20181121122953p:plain:w500

Chi2 83.641822
            Estimate  Std. error
Constant  402.530641    4.963109
Mean       -0.003979    0.009894
Sigma       0.983115    0.007064

推定値は完全に一致。誤差は若干異なるがなぜだろう。愛嬌でしょうか。誤差の3桁目までは一致しているので、実用上は問題ないだろう。 scipy.optimize.curve_fit においても、誤差を適切に与えることでROOTの結果と推定値は完全に一致することが分かった。以下ソースコード

C++ と ROOT版 C++ と ROOT5版 ガウス分布をフィッティング ($1781181) · Snippets · GitLab

Python3版 Python3版 ガウス分布をフィッティング ($1781185) · Snippets · GitLab

ウェブの情報をいっぱい参考にしたが、その一部。

https://omedstu.jimdo.com/2018/07/16/python%E3%81%A7gaussian-fitting/

scipy.stats.chisquare — SciPy v1.2.0 Reference Guide

講演会 川村静児氏「重力波:アインシュタインの奏でる宇宙からのメロディー」質疑応答 @2018年 ぎふサイエンスフェスティバル

会場内でメモしたため間違っているところがあるかもしれません。

Q. インフレーション理論で物理現象(特殊相対性理論)は成立しているのか?
A. 場が広がってるだけなので成立できる。
Q. インフレーションの音はシミュレーションはされているのか?
A. されているが、まだ言わない。
Q. 重さがなくなったのは重力子の質量になったと考えられないのか?
A. 重力波の媒介粒子は質量はないと考えられているので、ほぼ全てがエネルギーになったと考えるのが妥当。
Q. ブラックホール連星では他の情報は出てこないのか?
A. ブラックホール連星の合体では出てこないとされている。中性子星連星の合体では他の情報も出てくる。
Q. 光と重力波は何が違うのか?
A. 媒介する力が違う。また、電磁波はベクトル波、重力波はテンソル波。
Q. 重力子と重力波は同じなのか?
A. 重力波も粒であり波であるから、重力子と考えても良いと思う。

注: インフレーションで発生する重力波はsub-Hz帯なので、実は人間の耳には聞こえないんです。中性子連星やブラックホール連星での合体で発生する重力波は たまたま 人の可聴領域内だっただけなのです。

http://www.city.gifu.lg.jp/17404.htm

川村さん、準備と講演、お疲れさまでした。

updatestar.com について

このサイトから、2つほどファイルをダウンロードしたところ、一つはMicrosoft Defender君がきっちりガードしてくれた。

別のファイルをダウンロードしたところ、Microsoft Defender は動かなかったが、SHA-256を計算しVirusTotalで検索してみたところ見事引っかかった。

VirusTotal (←これは真っ当なサイトよ!)

たぶん、いえ、間違いなく、updatestarはダメな奴です。