工作と競馬

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

カテゴリ:4.ソフトウェア > 4.0 その他

Evernote デスクトップ版v10.4.4を使っていて、今更気付いたのだが、markdownが書けるようになってとても助かる。

昔も、少しは書けたような気がするが、いつの間にかかなり快適に書けるようになっている。

マークダウン書式を書くと、どんどんリアルタイムに変換していってくれる。それなりにいろんなものに対応している模様。

  • 見出し系は当然OK。#の数でレベルが変わって文字サイズが変わる。
  • 箇条書きもOK。番号付きリストもOK。というか、これはもともとMarkdownというかEvernoteの標準で書けたか。
  • 水平線もOK。
  • コードブロックも、バッククォート3つで出てきた。

```

テーブルは出し方がよくわからない。まあ、Markdownでテーブルを書くの自体、面倒なので、まあできなくてもいいか。

  • 自身のディレクトリ
cd /d %~dp0

概要

フリーソフトなどを使用し、ある領域をまたいで存在していた2つのドライブを1つに統合するパーティション変更を行った。


背景と目的

私の手持ちのPCでは、SSDのパーティションが約100GBのCドライブと、4GBのDドライブに分かれているのだが、別れている意味がほとんどないので、パーティションを変更し、連続した1領域にする。


詳細

0.情報収集

私のPCの場合、以下の図のようにCとDの間にOEMパーティションなるものがあるので、これをどうにかする必要がある。2つの隣接する領域であれば、Windows付属のディスクの管理ツールから作業が可能なのだが、いろいろ調べた結果、こちらなるフリーソフトを使って作業可能なようなのでやってみる。

20180817140223

1.AOMEI Partition Assistantのインストール

AOMEI Partition Assistantをダウンロードし、インストールした。


2.Dドライブの割り当て削除

ディスクの管理ツールで、Dドライブを選択し、ボリュームの削除を行った。なお、当該領域のデータはすべて失われるとのことだったので、必要なものはバックアップを実施しておいた。


3.OEMパーティションの移動

この作業は、AOMEI Partition Assistantを使う。OEMパーティションを選択し、ボリュームの移動を選択すると、以下のような画面が出るので、一番右側に寄せ、Cドライブのすぐ右隣に未割当領域ができるようにした。

20180817140657


4.Cドライブの拡張

ディスクの管理ツールで、Cドライブを選択し、ボリュームの拡張を行った。設定は以下に示す通り、先ほどCの右隣に確保した未割当領域すべてを使う。

20180817141023

この結果、以下のようにCドライブの容量がおよそ4GB増加した。無事完了。

20180817141100


まとめ

無事パーティション変更ができてよかった。

自分用メモ。

環境変数を追加するには、このあたりが参考になるが、

set VARNAME=VALUE

だ。永続的に設定するには、

setx VARNAME=VALUE

だ。

ここで、注意が必要なのは、新しく開いたコマンドプロンプトでないと追加したものが有効にならないこと。かつて無駄にハマって時間を食った。

  • コマンドプロンプトを2つ開いているとする(それぞれウインドウ1,2とする)
  • ウインドウ1で、setxコマンドを使って環境変数を追加する
  • ウインドウ1で、setコマンドで環境変数を表示すると、追加したものが表示される
  • ウインドウ2で、setコマンドで環境変数を表示すると、追加したものが表示されない
  • ウインドウ2を閉じて、新たに開いたウインドウで、setコマンドで環境変数を表示すると、追加したものが表示される

となる。注意。

概要

Microsoft Flowを使って、JSONデータを受け取り、Excelに記録するフローを作成し、動作を確認した。


背景と目的

最近、Microsoft Flowというサービスを使い始めた。これは、IFTTTのMicrosoft版という感じだが、かなり自由度高くフローを組み立てることができそうに見える。とりあえず、お試しで、JSONデータを受け取り、記録するだけというフローを作って試してみる。


詳細

0.仕様

仕様は以下とする。

  • JSONデータをPOSTリクエストで受け取る
  • 受け取ったデータとタイムスタンプを、Excelファイルに記録


1.Microsoft Flowの設定

1.1 トリガの設定

"要求" コネクタの"HTTP要求の受信時"トリガを選択。

20171122235316

次に、要求本文の JSON スキーマとして、以下を設定。要するに、受け取ったJSONをそのまま。

{
    "type": "object"
}

そして、メソッドは、POSTとした。

設定が終わったのが、以下。

20171122235244


1.2 アクションの設定

まず、ExcelファイルとしてOneDriveの適当なフォルダに、test.xlsxというファイルを作成した。そして、Sheet1のA1:B1をテーブルとして定義した。

次に、Flowの画面にて、ExcelコネクタのInsert Rowアクションを選択。具体的には、以下のように設定。

aaaaa

ここまでで、Flowの設定はOK。

2.動作テスト用スクリプト

以下のように、POSTリクエストを送るコードをPythonにて作成した。Content-Typeヘッダとしてapplication/jsonを忘れないこと。

# coding: utf-8

import requests
import json
import pprint

if __name__ == "__main__":

    body = {
        "param1": "value1"
    }

    url = "要求トリガのHTTP POSTのURLという欄に表示されているURL"

    response = requests.post(url, data=json.dumps(body), headers={'Content-Type': 'application/json'})

    pprint.pprint(response.json())

3.動作テスト

上記スクリプトを実行したところ、正しくフローが発動し、Excelファイルに以下のように書き込まれた。成功だ。

20171123000420

まとめ

Microsoft Flowを使って、JSONデータを受け取り、Excelに記録するフローを作成し、動作を確認した。IFTTTよりもカスタマイズ性が高いので、IoT的にも重宝するのではないかと思う。

概要

Windows10 PCで、iBeaconを受信するプログラムを作成し、動作することを確認した。


背景と目的

Windows8以降で、BLEに対応しているようなのだが、今までBLEを扱うWindowsプログラムを全く作ってこなかったので、一度手をつけてみたい。とりあえず、iBeaconを受信するプログラムを作成し、動作することを確認してみる。


詳細

0.環境

  • Windows10
  • Lenovo Idea Pad Yoga 13
  • Visual Studio 2017 Community
  • Visual C#を使用


1.参考サイト

Web上を探し回ったところ、こちらが非常によくまとまっていたので、参考にさせていただいた。


2.コーディング

2.0 Visual Studio

20170716201704

20170716201715

2.1 Windows.winmd参照の追加

まず、以下のファイルをメニューバー>プロジェクト>参照の追加で、参照ボタンから追加。(これは、参考サイトには詳しく書いてなかったが、こちらを参考にさせてもらった。)

  • C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.15063.0\Windows.winmd

これで、冒頭のusing Windows.Devices.***が、読み込める。


2.2 コード

プログラムは、C#で作成する。コードは、実は参考サイトそのまま。なので、詳細は割愛。ただし、アドバタイズメント受信時のイベントOnAdvertisementReceivedを、参考サイトにあるように、privateのインスタンスメソッドとして定義すると、Mainのwatcher.Received += OnAdvertisementReceived;でエラー。なので、staticに修正。(静的メソッドからインスタンスメソッドが参照できるわけないので、当たり前ですね。)

        // アドバタイズメント受信時
        // staticで定義する
        private static void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
        {
                :
        }

3.動作確認

上記のプログラムを実行したのが、以下。使用したiBeaconは、手元にあったMamorio。アドバタイズの頻度が低いせいか30秒に一度程度だが、ちゃんと検出されている

20170717003026


まとめ

Windows10 PCで、iBeaconの検出ができた。とりあえず、開発環境は手に入ったので、今後はBLEデバイスとの通信などにも手を伸ばしていきたい。

Windowsのタスクスケジューラへのタスク登録の方法は、

  • GUIから行う
  • コマンドプロンプトからschtasksを用いる

の2通りが考えられる。しかし、

schtasksコマンドでは、GUIで設定可能なすべての項目のうち一部しか設定コマンドオプションが用意されていない

ため、すべてのオプションをコマンドで設定する自動スクリプトを構築できないように思えるが、

schtasksコマンドでは、xmlファイルをインポートしてタスク登録が可能

であるので、

xmlファイルを編集しオプションを適宜設定する処理をスクリプト化してしまえば、コマンドですべてのオプションを設定可能

といえる。すなわち、

  1. schtasks /create でタスクを登録
  2. schtasks /query /tn タスク名 /xml により1で登録した設定をエクスポート
  3. 手順2のxmlを編集しオプションを変更したxmlを作成するスクリプトを実行
  4. schtasks /create /tn タスク名 /xml で変更後のxmlをインポート

という感じのbatファイルを作成しておけばよい。

なお、余談だが、SCHTASKS /CREATE /SC ONLOGON を実行するには管理者権限が必要なので、batファイルを実行する時は注意。

概要

 エラー内容に時刻を付加してファイル出力するシェルスクリプトを作成し、動作を確認した。


背景と目的

 ラズパイをいじっていて、エラー内容を時刻付きで記録しておきたかったのだが、シェルスクリプトでの書き方が分からなくていろいろ調べてやっとわかった。そこで、忘れないようにメモっておく。


詳細

1.やりたいこと
  • 実行したいコマンドの実行結果(標準出力)をsuccess.txtに上書き
  • 実行したいコマンドがエラーの時、その内容の先頭に時刻文字列を付加して、error.txtに追記
2.実装

 実行したいコマンドはここではテストのため、dirとする。引数に、フィルタリングのための文字列xを与える。xを含むファイルやディレクトリが見つからないときは、エラーになる。

dir x

 先頭に時刻を付加するには、sedコマンドを利用。以下は、先頭に、2017-01-03 16:11:05のような現在時刻が挿入される。

sed -e "s/^/`date "+%Y-%m-%d %H:%M:%S"`\n/g"

 あるコマンドcommand1のエラーをあるコマンドcommand2にパイプで渡すには、こちらを参考にすると、以下の通り。

command1 2>&1 | command2

 以上より、出来上がったものは以下。スクリプトにして使おうと思うので、第一引数でdirの引数が与えられるように$1となっている。

dir $1 2>&1 > success.txt | sed -e "s/^/`date "+%Y-%m-%d %H:%M:%S"`\n/g" >> error.txt
3.確認

 テスト用のコマンドは以下。

sudo bash test.sh # 正常時
sudo bash test.sh *.aaa # 拡張子aaaを含むファイルがないので、エラー

 これらを実行したところ、success.txtには、正常に結果が出力された。一方、error.txtは以下の通りちゃんと時刻が付加された。(何回か実行して追記されているのを確認)

2017-01-03 15:59:28
dir: *.aaa にアクセスできません: そのようなファイルやディレクトリはありません
2017-01-03 15:59:29
dir: *.aaa にアクセスできません: そのようなファイルやディレクトリはありません
:

まとめと今後の課題

 エラー内容に時刻を付加してファイル出力するシェルスクリプトを作成し、動作を確認できた。

概要

 IFTTTで、ごみ収集日前日にノティフィケーションされるレシピを作成し、動作を確認した。


背景と目的

 ときどき、私はごみ収集日を忘れてしまい出し損ねることがある。なので、これを解決する方法はないかと考えていたところ、IFTTTを利用するのはどうかと思いついた。IFTTTは、Web各所で紹介されているとおり、自分で好きなWebサービスを作れる仕組みである。これで、ごみ収集日をお知らせするレシピを作って置けば、収集日に気づけると思う。そこで、IFTTTでそのレシピを作って、動作確認してみる。


詳細

1.方針

 基本的な操作方法は、私は多少遊んでみたことがあるのと、Web各所でたくさん紹介されている(たとえばここ)ので、いきなりレシピの構成を考える。
ごみ収集日を忘れないようにするには、私の場合、前日の夜に玄関にごみ袋を移動させ、朝家から出るときにそれをもって家を出ればいいので、前日の夜にお知らせが来るという仕組みがあればよい。
そこで、まず決まった時間にトリガーをかけられるチャンネルを探す。代表的なのは、Date& Timeというやつがあるので、これをトリガ―チャンネルにしよう。
お知らせ方法は、スマホでメールを受信するという方法があるが、メールだとメールを見に行く手間があるので、もっと簡単なのがないかと探したところ、iOSのノティフィケーションというチャンネルがあることがわかった。これなら、ロック画面に表示されるし、見に行く手間が省ける。

2.レシピ作成

 まずは、トリガー。私の場合、月曜と木曜が収集日なので、前日夜である日曜と水曜の夜10時にトリガーがかかるとよい。Date&Timeチャンネルで、every day of the week atというトリガーがあるので、これを選択。

20160521105125
図2.1 トリガーの作成

 次に、アクションチャンネルは、IF Nortificationsを使う。これは、iOSデバイスであればApp StoreからIFというアプリをインストールする必要があるのでインストール。そして、アクションは1種類なのでそれを選択。

20160521114318
図2.2 アクションの作成

 ということで、レシピが出来上がった。

20160521114340
図2.3 出来上がったレシピ

3.動作確認

 さすがに、その曜日まで待つのは面倒なので、トリガーの時間を変更し試しに動かしてみた。(Check nowという機能もあって試せるはずなんだが、どうも発動しなかったので)
すると、以下の通り、ちゃんとノティフィケーションが来た。動作しているようだ。

IMG_2836
図3 ノティフィケーションが来た様子


まとめと今後の課題

 IFTTTで、ごみ収集日前日にノティフィケーションされるレシピを作成し、動作を確認できた。他にも、まだまだ生活に役立つレシピが作れそうなので、いろいろ試したい。

プログラミング関連のサイトで情報収集していると、MacやLinux環境でgitのコマンドを使って作業する例がたくさんある。私の環境はWindows PCでそのまま作業できないので、それができるように、Git for Windowsをインストールしてみた。
まず、こちらから、インストーラをダウンロード。
次に、インストーラを立ち上げ、基本的にデフォルトの選択状態で、インストールを実施。
20160504160756
20160504160837
20160504160907
20160504161024
すべてのアプリから、Git CMDを立ち上げたところが、以下の図。試しに、あるリポジトリをダウンロードした。ちゃんとできた。
20160504161725

このページのトップヘ