windows10にsshサーバを立てる (+起動時にサービス起動する)

参考ページ

qiita.com

手順

OpenSSHサーバをインストール

  • 設定 > アプリ > アプリと機能 > オプション機能 > 機能の追加 から OpenSSH サーバー を選択、インストール

f:id:TyaRon626:20200909150659p:plain

f:id:TyaRon626:20200909150729p:plain

f:id:TyaRon626:20200909150856p:plain

  • インストール場所
    • .ssh は C:\ユーザー[ユーザ名].ssh
    • sshd.exe は C:\Windows\System32\OpenSSH.

sshdの起動

PowerShell を管理者として開き、以下のコマンドを実行

> Start-Service sshd

鍵でのログイン許可

# PubkeyAuthentication yes

から # を削除する(コメントアウトを外す)だけ

  • 書き込み権限が~の話は下を参照

qiita.com

Windows起動時にsshdサービスを起動する

  1. "Win + R" で「ファイル名を指定して実行」ウインドウを出し、services.msc を入力・OK

f:id:TyaRon626:20200909155150p:plain

  1. OpenSSH SSH Serverを選択し、全般タブのスタートアップの種類(E)を自動に設定し適用・OK

f:id:TyaRon626:20200909155333p:plain

Windows10でのWoL設定

使用機器

  • Windows10端末

参考ページ

www.agilegroup.co.jp

lab4ict.com

手順

NICの設定

  • バイスマネージャを選択して開く

    "Win + X" or "左下Windowsマークを右クリック"でメニューを表示して選択

    f:id:TyaRon626:20200909141702p:plain

  • ネットワーク アダプター のWoL設定するデバイスを選択

f:id:TyaRon626:20200909141736p:plain

  • 電源の管理タブの「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする(O)」にチェック

    f:id:TyaRon626:20200909142018p:plain

  • 詳細タブのプロパティ内にある "Wake on magic packet" の値を Enabled にして OK

    f:id:TyaRon626:20200909142156p:plain

電源の設定

  • コントロールパネル > ハードウェアとサウンド > 電源オプション にある「電源ボタンの動作の選択」から「高速スタートアップを有効にする(推奨)」のチェックを外して 変更の保存 をクリック

暗転している場合は、「現在利用可能ではない設定を変更します」をクリックすることでチェックを外せるようになる

f:id:TyaRon626:20200909142334p:plain

f:id:TyaRon626:20200909142355p:plain

f:id:TyaRon626:20200909142652p:plain

magicパケットを投げる方法

> ipconfig /all
apt install -y wakeonlan

WoLのコマンドを入れ、

wakeonlan xx:xx:xx:xx:xx:xx

でmagic packetを送信(xx:xx:xx:xx:xx:xxは2で確認したMACアドレス

詰まったところ

  • さすがにノートパソコンはシャットダウン状態からの復帰は難しそう。スリープ状態からなら上記コマンドで復帰可能

Raspberry Pi zero wh での赤外線受信

使用機器等

  • Raspberry Pi zero wh (Raspbian GNU/Linux9 (stretch))
  • RPi.GPIO
  • ブレッドボード
  • ジャンパワイヤー ( オス - メス )
  • 赤外線モジュール ( OSI5LA5113A )

参考

基本的にはここを見ればできる

www.neko.ne.jp

が、ここの通りlircの設定、boot/config.txtの設定をしないと/dev/lirc0のデバイスファイルが生成されないので注意

qiita.com

手順

ライブラリ・パッケージインストール

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install lircd

lirc設定ファイルの変更

設定ファイルのdriver, device部分をいじって以下のように変更する

$ cat /etc/lirc/lirc_options.conf
[lircd]
nodaemon        = False
driver          = default
device          = /dev/lirc0
output          = /var/run/lirc/lircd
pidfile         = /var/run/lirc/lircd.pid
plugindir       = /usr/lib/arm-linux-gnueabihf/lirc/plugins
permission      = 666
allow-simulate  = No
repeat-max      = 600
#effective-user =
#listen         = [address:]port
#connect        = host[:port]
#loglevel       = 6
#uinput         = ...
#release        = ...
#logfile        = ...

/boot/config.txtの変更

ブート時の設定ファイル(?)に以下を追加する

$ echo "dtoverlay=gpio-ir, gpio_pin=18"

配線

今回は下の写真のように配線した

f:id:TyaRon626:20200513014235j:plain

とりあえず再起動

$ sudo reboot

赤外線の受信

とりあえずlircdを再起動するとのことなので再起動して、mode2コマンドで赤外線を受信する

$ sudo /etc/init.d/lircd restart]
$ mode2 -d /dev/lirc0
Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0

ファイルに保存して赤外線LEDで出せばRPiリモコンが作れるかも?

Raspberry Pi 3BでのLチカ

使用機器・ソフト

  • Raspberry Pi 3B (Raspbian GNU/Linux 9 (stretch))
  • RPi.GPIO
  • ブレッドボード
  • ジャンパワイヤー(オス - メス)
  • LED
  • 抵抗(今回は10Ω)

手順

ライブラリインストール

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install python-rpi.gpio

GPIOの確認

以下のコマンドで番号を確認。 今回使用する番号はPhysicalの場所を参照する。 コマンドがない場合はgit cloneしてくる的なことがいろんなところに書いてあるがgitで持ってこれないようなのでなければあきらめる。最悪下がなくてもできる(かも)

$ gpio readall
 +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |  OUT | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+

配線

上のコマンド出力結果から、6番ピンがGND(グランド)ということがわかる。 今回は8番ピンにプラス側をつなぐことにする。

f:id:TyaRon626:20200513014205j:plain

コード

以下のpythonコードを作成

import RPi.GPIO as GPIO
import time

//8番ピンを指定
pin=8

//初期セットアップ
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin,GPIO.OUT)

//8番ピンをON(LEDを光らせる)
GPIO.output(pin, True)
//1秒待機
time.sleep(1)
//8番ピンをOFF(LEDを消す)
GPIO.output(pin, False)

GPIO.cleanup()

実行

$ python3 led.py

これでLEDが一度光って1秒後に消えるはず

Emacs の設定方法・設定ファイルの管理方法

動機

emacsを使うに当たって設定ファイルもいじれないと人権がないらしいので勉強のためのメモ

設定

設定ディレクト

以下の3通りがあるらしい。.emacs.d/ が良さそうかも?

  1. .init.el
  2. .emacs.d/
  3. .emacs

ディレクトリ構造

.emacs.d/ のディレクトリ構造

Emacs の便利そうなコマンド

動機

Emacs実践入門を読みながら個人的に重要そう・便利そうなコマンド・設定をメモしていくだけの備忘録

コマンド

別ファイルの内容をインポート (P34)

C-x C-i <ファイル名> RET

今開いているファイルに指定したファイルの内容をインポートする

文字コード・改行コードの変更・更新(P35)

変更

C-x RET f

更新

C-x RET r

WindowsLinuxでファイル共有するときに大切そう?

マクロ (P51)

マクロの記録開始

C-x, (

(start-kbd-macro)を実行したことになる

マクロの記録終了

C-x, )

(end-kbd-macro)を実行したことになる

マクロの実行

C-x, e

(call-last-kbd-macro)を実行したことになる

繰り返し実行

C-u 10 C-x e

10回実行する。10の部分で回数指定

マクロの保存

M-x insert-kbd-macro RET insert- RET

->よくわかっていないので、使う時がくれば勉強する

ヘルプを表示する (P55)

M-x info か C-h か <F1>

これが一番大事まであるらしい。

MNIST データセットの分割

概要

MNISTデータセットを同じサイズで任意の数に分割する.

ヘッダがあるので単純に分割できず,ヘッダを書き換えながらデータセットを分割する

環境

スクリプト

今回はシェルスクリプト(とperl)を用いて実装する

詳しいコードの説明は気が向いたら

#!/bin/bash

if [ $# -ne 1]; then
    exit 1
fi

mkdir splited-$1

# Extract header information
dd if=train-mnist.image of=train-image.header bs=1 count=16
dd if=train-mnist.lable of=train-label.header bs=1 count=8
dd if=test-mnist.image of=test-image.header bs=1 count=16
dd if=test-mnist.label of=test-label.header bs=1 count=8

# Remove header information
dd if=train-mnist.image of=train-image.row ibs=1 skip=16
dd if=train-mnist.label of=train-label.row ibs=1 skip=8
dd if=test-mnist.image of=test-image.row ibs=1 skip=16
dd if=test-mnist.label of=test-label.row ibs=1 skip-8

#Split datasets and labels
split -n $1 -a 1 --numeric-suffixes=1 train-image.row splited-$1/train-image.
split -n $1 -a 1 --numeric-suffixes=1 test-image.row splited-$1/test-image.
split -n $1 -a 1 --numeric-suffixes=1 train-label.row splited-$1/train-label.
split -n $1 -a 1 --numeric-suffixes=1 test-label.row splited-$1/test-label.

# Create a new header
## label header
xxd train-label.header | perl -sale 'printf("%s %x %s\n", join(" ", @F[0..3]), hex($F[4])/$N, join(" ", @F[5..9]))' -- -N=$1 | xxd -r >> splited-$1/label_new.header
## image header
xxd train-image.header | perl -sale 'printf("%s %x %s\n", join(" ", @F[0..3]), hex($F[4])/$N, join(" ", @F[5..9]))' -- -N=$1 | xxd -r >> splited-$1/image_new.header

# Create new dataset
for i in `seq 1 $1`
do
    # Create dataset
    cat splited-$1/label_new.header splited-$1/train-label.$i >> splited-$1/train-label$1.$i
    cat splited-$1/label_new.header splited-$1/test-label.$i >> splited-$1/test-label$1.$i

    cat splited-$1/image_new.header splited-$1/train-image.$i >> splited-$1/train-image$1.$i
    cat splited-$1/image_new.header splited-$1/train-image.$i >> splited-$1/train-image$1.$i

    # Delete used file
    rm splited-$1/train-label.$i
    rm splited-$1/test-label.$i
    rm splited-$1/train-image.$i
    rm splited-$1/test-image.$i
done

# Compress as .gz file
for i in `seq 1 $1`
do
    gzip splited-$1/train-image$1.$i
    gzip splited-$1/train-label$1.$i
    gzip splited-$1/test-image$1.$i
    gzip splited-$1/test-label$1.$i
done

# Delete unnnecessary files
rm train-image.row train-label.row train-image.header train-label.header
rm test-image.row test-label.row test-image.header test-label.header

# Make dataset directory
for i in `seq 1 $1`
do
    mkdir splited-$1/dataset$i
    mv splited-$1/train-image$1.$i.gz splited-$1/dataset$i/train-image.gz
    mv splited-$1/train-label$1.$i.gz splited-$1/dataset$i/train-label.gz
    mv splited-$1/test-image$1.$i.gz splited-$1/dataset$i/test-image.gz
    mv splited-$1/test-label$1.$i.gz splited-$1/dataset$i/ttest-label.gz
done