粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

Windowsを使って組み込みっぽい案件をやった話

組み込みっぽい案件とは

ここでの「組み込み」とは「単一の機能を実現する」の意味合いです。

  • 単一の機能を実行する
  • PCに電源を入れたときに起動し機能し続ける

「何故,DOSなのか」などはout of controlなので聞かないでください。

Windows Embedded とかIoTとかあるらしいですがよくわからんし時間的な問題でいろいろと諦めました。各所との連携とか難しいですね。 Windows 10 IoT Enterprise/Windows Embedded OSのサポートと供給期間|Microsoft|製品情報|東京エレクトロンデバイスEmbedded Solution

やったこと

そもそもいろいろガバですがこんな感じに進めました。

  • 動かすのはPythonスクリプト(楽だと思ったから)
  • batファイルを作成し,起動時に動くようにした
  • 権限が必要な操作とかでちょっと困った

Pythonスクリプトをbatから実行

Anacondaで環境作ってましたが,単一動作しかしないので結局Anacondaフォルダ以下のpython.exeとScriptsフォルダにパスを通してしまいました。 batファイルは非常に簡単で以下のものを作成します。

@echo off
python XXX.py

管理者権限が必要な操作をbatでやる例

netshでIPアドレスを固定化したかったのですがこのコマンドは管理者権限でやる必要があります。 WindowsのnetshコマンドでTCP/IPのパラメータを設定する:Tech TIPS - @IT

こんな感じのbatファイルを管理者権限で実行する必要があるわけです。

@echo off
netsh interface ip set address "イーサネット" static 172.16.1.101 255.255.255.0 172.16.1.1

以下のブログにあるように,powershellを使ってやりました。 管理者権限でbatを実行したい時にやッた事

@echo off
powershell start-process 実行対象.bat -verb runas

このbatを実行するときには管理者権限が必要とされます。つまり,クリックでOKを選択する必要があることに注意。 電源を入れただけでは実行出来ないのです。

Boot時に特定のプログラムを実行する

「組み込み」なので電源を入れさえすればプログラムが勝手に動き出すようにしてほしいです。

Boot時に特定のプログラムを起動する方法はいくつかありますが,管理者権限の必要不要に応じて2つの方法を紹介します。

管理者権限が不要の時

以下のフォルダにショートカットファイルを置けば起動時に実行してくれるようです。

C:\Users[ユーザ名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Debian系なら.bashrcの他に/etc/rc.localに置くことに該当します。 linux起動時に自動的に実行するコマンド(プログラム)の設定

管理者権限が必要の時

上記の管理者権限をKickするbatファイルを実行するときに必要です。 タスクスケジューラを使うようですが,今回は結局やりませんでした。 管理者権限が必要な常駐アプリはタスクスケジューラでスタートアップさせる

一応メモとして。

その他の作業

UltraVNCを用いたファイル操作

あと,物理的な接続なしでwifiで今後の作業を進める必要があったので,Winscpのようにファイル転送できるUltraVNCというソフトをインストールしました。 UltraVNCでコンピュータをリモート制御する(サーバ編):Tech TIPS - @IT

Windowsの自動更新をOFF

Windows10が勝手に自動更新をかけてきます。組み込みでいきなり例の青画面が続くのは心臓に悪いので確実に息の根を止めます。

IPアドレスを固定化

IPアドレスを固定化します。

Windows 10 IPアドレス固定方法

感想

もっと賢くできないですか…ね????

MATLABでGPSデータから距離を計算

GPSの緯度経度の行列から移動距離を計算するアルゴリズムmatlab公式に用意されてないので自分で書きました。 探せばあるのかもしれません。

今回の手法ではヒュベニの公式というのを使います。 詳細な説明等はここのサイトがよいです。

画像も借りてきました。

関数は以下の通り。整備したらGithubにでも投げます。

function D = calcGPS_dist(LON,LAT)

len = length(LON);

D = 0;
for i = 1:len-1
    D = D+hubeny([LON(i),LAT(i)],[LON(i+1),LAT(i+1)]);
end

end

function d = hubeny(L1,L2)
% input: pair of [LON,LAT]
% output : distance [m]
% e2 = 0.00669437999019758;
a = 6378137;
b = 6356752.314140;
e2 =   (a^2 - b^2) / a^2;

mu_y = (L1(2) + L2(2))/2;
W = sqrt(1-e2*(sind(mu_y))^2);
M = a*(1-e2)/(W^3);
N = a/W;

dx = (L1(1)-L2(1))/180*pi;
dy = (L1(2)-L2(2))/180*pi;

d = sqrt( (dy*M)^2+(dx*N*cosd(mu_y))^2 );

end

ハマリポイントは角度をradに変換するのを忘れていたところです。

matlabのコマンドウィンドウでGitを使う

matlabコードをGitで管理していますがコマンドウィンドウからもgitを叩けるのをこのサイト見て知ったのでメモします。

外部コマンドの実行の仕方

じつは”!”を事前につけるとコマンドプロンプトのコマンドが実行できるようです。ipconfigなども打てました。

jp.mathworks.com

一連のgit操作

一連のGitの操作に!を前置すれば済みます

!git add .
!git commit -m "AutoMaticUpdate"
!git push origin master

なんとこれをmファイルでまとめて実行させることもできます。mファイルでシェル芸ができます。 これって脆弱性なんじゃないか…

注意点・エラー

  • matlabユニコードの設定のせいかなにやら文字化けが発生します。これは今の所困ってないので無視。

  • git commitでメッセージを指定しないと通常vim等のエディタが出ますが上記の文字化けと組まれると非常にきついです。メッセージ指定しようね。

  • gitのversionが古いとpush時に以下のようなメッセージが出ます。(文字化け含む)

fatal: AggregateException encountered.
   1 縺、莉・荳翫�繧ィ繝ゥ繝シ縺檎匱逕溘@縺セ縺励◆縲 
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument

ここの記事にある通り公式から最新のverをインストールすることで解決します。

自動でGitでpushする関数

で,やっぱりこういうのは関数化したいわけで, GitComiiter関数を作成しました。evalを使っている邪悪なプログラムですが引数にCommit Messageを受けて動きます。 なお,デフォルト引数としてMessageがないときは自動的に適当なコメントをつけてくれます。

function GitComiiter(message)
 if nargin < 1
     message = 'AutoMaticUpdate'
 end
 
!git add .
eval(['!git commit -m "',message,'"'])
!git push origin master

 end

脆弱性とかよくわかんないので詳しい方のご指摘・ご助言お待ちしております。

RICOHのTHETA SCを買ってきた所感

ストレスが溜まるとなんかしらのガジェットを買ってしまう病にかかってしまいました。 そしてこれもその成果物です。

RICOH 360度カメラ RICOH THETA SC (ブルー) 全天球カメラ 910743

RICOH 360度カメラ RICOH THETA SC (ブルー) 全天球カメラ 910743

スペック詳細

すでに詳しいことを書いてくれているサイト様がいるので以下を参照ください。 aozora-ref.com

記事作成時点の2018年9月では上位種のTHETA Vまたは,THETA Sというのが出ています。

RICOH THETA V 360度カメラ 全天球 910725 メタリックグレー

RICOH THETA V 360度カメラ 全天球 910725 メタリックグレー

価格比較は以下の様になっています。

  • THETA V:5万くらい
  • THETA S:3万強
  • THETA SC:2万弱

本製品の利点は2万円弱とそこそこの値段で本格的な360°カメラが手に入るという点でしょうか。

公式の写真には以下のようなサンプル画像があります。パノラマ画像である点を除いても現在使用しているiPhoneSEではおそらく撮れないですね。

Milky Way from an Norikura Observatory in Mt. Marishiten-dake, Japan - Spherical Image - RICOH THETA

本製品の利点・欠点

カメラとして見たときの本商品の良い点は, - 撮影者を含めて全員を確実にフレームに収めることができる - 露光やISO等の調整ができる - ダイナミックレンジがそこそこ高い という点です。画素数は控えめですが総じてスマホのカメラで手の届きにくい需要に刺さっているというのが本製品の良い点です。

欠点 - 動画撮影の質が残念 - 本体からスマホに画像を送って確認するのがやや手間 - PCからの制御ができない(追記)

動画や高度なことをしたいとなるとエントリー機であるためスペックの低さが厳しいです。 写真をすぐ確認できないのもちょっと不満ではあります。

余談ですがレンズは結構頑丈で何回か落としたことがありますが撮像で目立った傷は出なかったです。

上位モデルを買うべき理由(追記)

ノリでThetaSCを買いましたがキチンと上位モデルを買うべきだったと反省しています。 理由はUSBを介した動画のストリーム受信(Webカメラとして使うこと)がSCでは対応していないからです。

したがって下の記事の様にUSBカメラのように用いたりが出来なくなっています。 THETA S + Raspberry Pi 2でライブストリーミングしてみた

一応Wifi接続してAPIを叩けば640*480の画像が手に入るらしいのですが,正直使用には耐えない感じがあります。 360度カメラは動的な部品なしに全方位観測できるのでいろいろ応用できそうなのでそういったつもりのある方はなるべくS以上の上位モデルを買うべきでしょう。

マニュアル撮影で夜景をキレイに撮影

オートで某所の夜景を撮影すると以下のようになります。

オートでの撮影Test - Spherical Image - RICOH THETA

手で持っているので少しブレるのとノイズが入ってしまうのがわかります。 そこらのスマホよりはキレイですけどね。

そこでマニュアルモードから露光とISOを調整してキレイにとっていきます。(露光2秒 ISO200)

露光1秒,ISO200 - Spherical Image - RICOH THETA

露光時間またはISO感度の数値を上げることで暗い箇所を明るく撮ることができます。 ISOは平たく言うと電気信号の増幅率です。Nikonの説明がわかりやすくていいんじゃないでしょうか。

ISOは信号を増幅するためノイズが乗りやすくなりますので僕のお気に入りはISOを下げて露光時間で調節する方法です。 風景などの静物を撮る際に非常に綺麗にとれるようになります。

ヨセミテで撮った写真ですがこのときはISOを100にして30秒くらい露光しました。ワクワクしますね。なお車の上で取りました。

Post from RICOH THETA. - Spherical Image - RICOH THETA

相性の良い製品

三脚類

真下と真上以外のほぼ全球を撮れるという特性上どうしても自分の腕や手などが入ってしまうことがあります。景色にフォーカスしたい時など特にそうですが細長い三脚があると良いでしょう。

ケース

普段遣いのケースは付属の布製のもので良いです。耐久性が心配ならメガネケースなどがサイズてきにちょうどよいです。

それでもお金が無限にあればほしいのが耐水ケース。水中の世界を360°で撮るとめちゃくちゃキレイです。南国に持っていきたいくらい。

Okinawa-2 (Using Underwater Housing TW-1) Kiyotaka Kitajima - Spherical Image - RICOH THETA

とんでもなくほしいですが本体と同じくらいの値段するんですよね。タカイヨー Instaのカメラのケースは7000円なのに…

RICOH TW-1 水中ハウジングケース 910753

RICOH TW-1 水中ハウジングケース 910753

なお,筆者はカバーとして以下のシリコンケースを買いましたが手触りと滑りにくさ改善した以外は特に恩恵を感じなかったので本体が傷つくのを厭わなければまずは三脚を買うのをオススメします。

ストラップ

本製品は意外と頑丈ですがそれでもレンズがむき出しですしいろいろと怖いのでストラップなんかをつけておくと良いでしょう。 私も買いましたが落としそうなところでは心強かったです。

でもね,筆者はまずは三脚を(略

所感

都会ではあんまり用途がないですが,旅行で非常に役立つのでなどにぜひ持っていきたいですね。 GrobalWifi等でWifiを借りる際に一緒に借りれるのでそちらの方で試してから見当というのもありです。

要はたーのしー!と。そういうことです。

LogoMakerの無料ロゴ作成サービスが楽しくて30分溶かした話

雑記事ばっか書いてると思われますが,まぁ遊んでいってくださいや。

hatchful.shopify.com

使用に際する要項などが特にないっぽいのでスクリーンショットで回収しちゃっても良さそうですが,そこは個人の倫理観に任せます。

選択事項は, - ジャンル(Tec向け,子供向け,スポーツ…) - シチュエーション? - 用途(ブログ,名刺用 - ロゴイニシャル などです。

こんな感じにロゴが出来ていきます。 f:id:ossyaritoori:20180828213237p:plain

そのうち1つを選ぶとフォントや色等の微調整ができるっぽいです。 f:id:ossyaritoori:20180828213731p:plain

なお,画像のダウンロードにメールアドレスを打ち込む必要があるのはちょっと抵抗があるかもしれません。 正方形のロゴ画像だけでなく,各種SNSに合わせたいくつかのパターンを用意してくれるので自作exeソフトのアイコンとかにしても良さそうです。

Texで脚注をつける in 電気学会

電気学会での作法

電気学会では脚注は*か+を使えと言われます。 出展:http://www.iee.jp/wp-content/uploads/honbu/31-doc-honb/50-01-1-0-2.pdf

Latexでこれを実現するには以下の様に書きます。

\renewcommand\thefootnote{*\arabic{footnote}}
\footnotetext[注釈番号]{テキスト}

こんな感じになるわけです。

出展:footnote: LaTeX

+印にしたければ上の\arabicの前の*を+に変えれば良いです。

また,記号だけにしたければfnsymbolが使えます。 追記:ただし,fnsymbolは環境によって挙動が違うかもしれません。

私の環境ではダガーマークを並べる表記になりました。 以下のように設定すれば5つまで†を並べられます。

\renewcommand\thefootnote{\dag\fnsymbol{footnote}}
\footnotetext[0]{†1つ}
\footnotetext[1]{†2つ}
\footnotetext[2]{†3つ}
\footnotetext[3]{†4つ}
\footnotetext[4]{†5つ}

Caption に Footnoteをつける

Caption に 脚注を入れるとエラーが出ます。

\footnotemarkというコマンドを使いますが,エラーが出ることがあるので\protectを前置すると良いでしょう。 tex.stackexchange.com

\caption{ここに脚注 \protect \footnotemark}

\footnotetext[番号]{文章}

Latexでの引用符の書き方注意

毎回指摘するのも疲れるしここに書いておきます。

Latexでの引用符の書き方

論文のタイトルなどの引用符は表記上は基本的に""(ダブルクォーテーション)を用います。

しかし,Texでそのまま書いてもあんまり良い結果になりません。 正しくは`(@のところにいるやつ)と’(7のところにいるやつ)を使います。

"Smart Electricity Meter Data Intelligence for Future Energy Systems: A Survey"

ではなく,

``Smart Electricity Meter Data Intelligence for Future Energy Systems: A Survey''```

と書くのです。

結果はそれぞれ f:id:ossyaritoori:20180822121958p:plainf:id:ossyaritoori:20180822121928p:plain のようになります。

おわかり

余談

Texを使っているならBibtexを使わない手はないのでよっぽど小規模な文書出ない限り出番がないかもしれませんね。 まだの人ははやくMendeleyとかと連携してBibtexを使いましょう。