Raspberry Pi Zero を USB ケーブル 1 本で遊ぶ

概要

Raspberry Pi Zero をディスプレイ、ネットワークアダプタなしで使用する方法です。 類似タイトルの記事がいくつかあったので、それらの記事に倣っています。 2016-11-25 版の Raspbian では ssh がデフォルト off となっているため、ssh を有効化する設定を追記しています。

確認環境

参考情報

解説

SDカードに Raspbian を書き込む

Raspbian Jessie Lite のイメージファイルをダウンロード。 4GB以上の容量のあるSDカードを用意する。

diskutil コマンド、dd コマンドを使用して、イメージファイルをSDカードに書き込む。環境により異なるため省略して記載する。

  • diskutil list でSDカードが接続されているデバイスを特定
  • sudo diskutil unmount /dev/<上記で調べたデバイス> でアンマウント
  • sudo dd bs=1m if=2016-11-25-raspbian-jessie-lite.img of=/dev/<上記で調べたデバイス> で書き込む

設定を変更する

SDカードへの書き込みが完了すると自動的にマウントされて Finder に boot が表示される。

config.txt, cmdline.txt を書き換える。

  • config.txt
    • dtoverlay=dwc2 を追記
  • cmdline.txt
    • ... rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh

ssh ファイルを作成する。2016-11-25 では ssh はデフォルトで off となっている。boot に ssh ファイルを置くことで on となる。

$ cd /Volumes/boot
$ touch ssh

Finder で boot を取り出す。以上でSDカードの準備は完了。

Raspberry Pi Zero を起動する

SDカードを挿してから、USBケーブルをPCと接続する。 接続するとOSが起動するので待つ。 電源はPCから供給される。 緑ランプの点滅が収まれば起動が完了していると思われる。 (USBケーブルは家にあった適当なケーブルを使ったら繋がった。 USBケーブルによっては動作しないとのことなので注意。 参考情報のサイトを参照。)

ssh で接続する

PCのターミナルを起動し、以下を実行する。password は raspberry

mac:~ nosix$ ssh pi@raspberrypi.local
The authenticity of host 'raspberrypi.local (169.254.225.196)' can't be established.
ECDSA key fingerprint is SHA256:<内緒>.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'raspberrypi.local,169.254.225.196' (ECDSA) to the list of known hosts.
pi@raspberrypi.local's password: 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $ 

セキュリティリスクがあるので passwd コマンドで新しいパスワードに設定するように書かれている。

Windows 10 でパーティションサイズを変更する

※1 : 2017.07.22 追記/修正
※2 : 2017.09.14 追記
※3 : 2017.12.06 追記

概要

VMware を使用しているとディスクサイズを自由に変更することができます。 ディスクサイズを増やした時に C ドライブのパーティションサイズを拡張することになりますが、 回復パーティションが存在するために拡張できません。 本記事では、回復パーティションを移動して、パーティションサイズを拡張する方法を説明します。

私の環境(下記の確認環境)にて実施して確認した手順です。 他の環境にて動作を保証するものではありません。 他の環境のサポートは致しかねます。(※1)

確認環境

  • Windows 10 Pro
    • バージョン 1607 (※1)
    • OS ビルド 14393.479 (※1)
  • VMware Fusion 8.5.8 (※1)

参考情報

解説

全体の手順は以下の通り。

  1. 回復パーティションにドライブレターを割り当てる
  2. 回復イメージを保存する
  3. 回復パーティションを削除する
  4. 回復ドライブを作成できないことを確認する
  5. C ドライブを拡張する
  6. 新規パーティション(回復パーティションになる)を作成する
  7. 回復パーティションに設定する
  8. 回復パーティションのドライブレターを削除する
  9. 回復ドライブを作成できることを確認する

コマンドは全て管理者として実行する。

回復パーティションにドライブレターを割り当てる

回復パーティションにドライブレター R を割り当てる。

C:\WINDOWS\system32>diskpart

Microsoft DiskPart バージョン 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
コンピューター: XXX

DISKPART> list disk

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン            64 GB    29 GB

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ              500 MB  1024 KB
  Partition 2    プライマリ               33 GB   501 MB
  Partition 3    回復                 450 MB    33 GB

DISKPART> select partition 3

パーティション 3 が選択されました。

DISKPART> assign letter=R

DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。

DISKPART> exit

DiskPart を終了しています...

回復イメージを保存する

R ドライブに隠されている回復イメージ Winre.wim を参照できるようにした後に、コピーする。

C:\WINDOWS\system32>attrib R:\Recovery\WindowsRE\Winre.wim -h -s -r

C:\WINDOWS\system32>copy R:\Recovery\WindowsRE\Winre.wim C:\
        1 個のファイルをコピーしました。

回復パーティションを削除する

ドライブレターを削除した後にパーティションを削除する。 ドライブレターの削除を忘れると、後で同じドライブレターを使用できなくなるので注意。

C:\WINDOWS\system32>diskpart

Microsoft DiskPart バージョン 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
コンピューター: XXX

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> select partition 3

パーティション 3 が選択されました。

DISKPART> remove letter=R

DiskPart はドライブ文字またはマウント ポイントを正常に削除しました。

DISKPART> delete partition override

DiskPart は選択されたパーティションを正常に削除しました。

DISKPART> exit

DiskPart を終了しています...

回復ドライブを作成できないことを確認する

以下に示す手順により回復ドライブを作成できないことを確認する。

回復パーティションが削除された状態で回復ドライブの作成を行うと以下の結果となる。

C ドライブを拡張する

回復パーティションのサイズを覚えておく。

ドライブ C のパーティションを拡張する。回復パーティションのサイズ分だけ残す。

回復パーティションの領域を残して拡張した結果。

新規パーティション(回復パーティションになる)を作成する

新規パーティションを作成し、R ドライブとして設定する。

C:\WINDOWS\system32>diskpart

Microsoft DiskPart バージョン 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
コンピューター: XXX

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> create partition primary

DiskPart は指定したパーティションの作成に成功しました。

DISKPART> format quick fs=ntfs

  100% 完了しました

DiskPart は、ボリュームのフォーマットを完了しました。

DISKPART> assign letter=R

DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。

DISKPART> exit

DiskPart を終了しています...

回復パーティションに設定する

R ドライブにフォルダを作成し、回復イメージを配置する。 回復イメージの場所を設定し、有効化する。

(本記事執筆時の私の環境では下記の方法で設定できていましたが、 Windows 10 では REAgentC の仕様が変更されているとコメントにて情報を頂きました。 https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn938308(v=vs.85).aspx (※2))

C:\WINDOWS\system32>md R:\Recovery\WindowsRE

C:\WINDOWS\system32>copy C:\Winre.wim R:\Recovery\WindowsRE
        1 個のファイルをコピーしました。

C:\WINDOWS\system32>C:\Windows\System32\reagentc /setosimage /path R:\Recovery\WindowsRE /index 1
ディレクトリは次に設定されています: \\?\GLOBALROOT\device\harddisk0\partition3\Recovery\WindowsRE

REAGENTC.EXE: 操作は成功しました。

C:\WINDOWS\system32>C:\Windows\System32\reagentc /enable
REAGENTC.EXE: 操作は成功しました。 (※1)

回復パーティションのドライブレターを削除する

設定は完了したため、ドライブレターは削除する。 回復パーティション(id=27)に設定する。

C:\WINDOWS\system32>diskpart

Microsoft DiskPart バージョン 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
コンピューター: XXX

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ              500 MB  1024 KB
  Partition 2    プライマリ               63 GB   501 MB
  Partition 3    プライマリ              451 MB    63 GB

DISKPART> select partition 3

パーティション 3 が選択されました。

DISKPART> remove letter=R

DiskPart はドライブ文字またはマウント ポイントを正常に削除しました。

DISKPART> set id=27

DiskPart は、パーティション ID を設定しました。

DISKPART> exit

DiskPart を終了しています...

set id=27 では、「指定された種類は正しい形式ではありません。」とエラーになることがあるとの情報を頂きました。 その場合には、以下の様にするとのことです。(https://technet.microsoft.com/ja-jp/library/dd744301(v=ws.10).aspx) (※3)

set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac

回復ドライブを作成できることを確認する

「回復ドライブを作成できないことを確認する」で行った手順を行う。 成功していれば以下の結果になる。

Thymeleaf で isXxx プロパティを参照するとエラーになる

概要

Thymeleaf の変数式で ${aVariable.isXxx} とするとエラーになって困った時の記録です。

確認環境

  • Spring Boot 1.4.2
    • Spring 4.3.4
    • Thymeleaf 2.1.5, 3.0.0
  • Kotlin 1.0.5

解説

Kotlin で次のクラスを作成したとする。

data class User(
    val name: String,
    val age: Int,
    val address: Address,
    val isEnabled: Boolean)

Java ならば以下のようになる。

public class User {

    private final String name;
    private final int age;
    private final Address address;
    private final boolean isEnabled;

    public boolean isEnabled() {
        return isEnabled;
    }

    ... (setter/getter, toString, equals, hashCode メソッドと続くが省略)
}

Thymeleaf では User オブジェクトの isEnabled プロパティを参照するために以下のように書く。

<span th:text="${user.isEnabled}">どうなるでしょう?</span>

これはエラーになる。isEnabled プロパティが見つからないと。 isEnabled ではなく enabled とすることで参照できる。

<span th:text="${user.enabled}">参照できる</span>

何故エラーになるのかと思い、デバッガで確認した。

org.springframework.expression.spel.support.ReflectivePropertyAccessor クラスの findGetterForProperty メソッドでは、 propertyName=isEnabled を IsEnabled に変換した後に findMethodForProperty メソッドを呼ぶ。

findMethodForProperty メソッドでは、prefix=is と methodSuffix=IsEnabled を結合して isIsEnabled とした上でメソッド名と equals で比較。

プロパティ名を enabled とすれば、isEnabled となるため参照できる。

Thymeleaf は内部的に SpEL (非SpringではOGNL) を使って式を解釈している。 上記は SpEL の一部に該当する。

bootRun で Spring Boot を起動した時に、IntelliJ IDEA でデバッガを使う

概要

Spring Boot と IntelliJ IDEA の組み合わせでデバッガを使う方法です。 Terminal から bootRun 起動する場合に限ります。

確認環境

  • IntelliJ IDEA CE 2016.3
  • Spring Boot 1.4.2

参考情報

解説

Run > Edit Configurations を選択する。

Configuration を新規追加。

Remote を選択。(Socket で接続する。)

任意の名前に設定し、他はデフォルトでOK。

Terminal から起動する際に --debug-jvm を付けて bootRun を実行すると接続待ちになる。

作成した Configuration (例では、bootRun (debug)) でデバッグ実行を行うと、Socket が接続されて bootRun の起動が継続する。

以上で、デバッガを使用できる状態になる。

Thymeleaf snippet

概要

Thymeleaf の書き方を学習するために、チュートリアルの内容を一通り書いてみました。 その記録です。

確認環境

  • IntelliJ IDEA COMMUNITY 2016.3
  • Spring Boot 1.4.2
  • Thymeleaf 2.1.5

参考情報

Thymeleaf の使い方。日本語。

内容

github.com

html タグの xmlns:th="http://www.thymeleaf.org" は IDEA のエラー対策です。

雑感

IntelliJ IDEA ULTIMATE を使えば Thymeleaf でも補完できるらしい。 COMMUNITY は Thymeleaf の補完だけでなく JavaScript の整形、補完もできないので、開発で使うなら ULTIMATE を買わないとダメだなと思う。

FaceRig + 恋声 + Skype で映像と音声を変換して通話する

概要

FaceRig + Live2D Module を使えばイケメン・美少女キャラクターに成り替わることができます。 恋声を使えばマイク入力の音声を変換して女声・男声に替えることができます。 これらと Skype を組み合わせれば、姿と声を変えて通話することができます。

FaceRig + Live 2D Module は合わせても 2000 円弱、恋声は無料。 いずれも Windows 用のソフトウェアです。 MacBook Pro で試したいと思い、VMware Fusion 8 で動いている Windows 10 に環境構築しました。

確認環境

参考情報

解説

映像の設定、音声の設定、映像と音声を組み合わせて Skype に出力する手順で構築する。

仮想マシンのカメラを有効にする

  1. 仮想マシンをシャットダウン
  2. 設定からカメラを追加

以下、設定からカメラを追加する手順。

FaceRig をインストールする

  1. Windows 10 を起動
  2. Steam, The Ultimate Online Game Platform から Steam をダウンロードして、インストール
  3. Steam を起動して FaceRig と Live2D Module をインストール
  4. FaceRig を起動する
    • LAUNCH しようとするとエラーが表示されるので、OPTIONS から設定を変更 (DX11 ではなく DX9 を使用)
  5. アドバンス UI に変更する
  6. 高度なトラッキングの設定から、カメラデバイスの指定を変更
    • VMware Virtual USB Video Device
  7. アバターの設定を変更
  8. 自動調整を実行
    • 頭ポーズの(早い)自動調整
    • 表情の(早い)自動調整

以下、画像で手順を説明する。

Steam で FaceRig と Live2D Module をインストール。

FaceRig を起動。

アドバンス UI に変更。

カメラデバイスの指定。

アバター設定。

自動調整。

以上で映像の設定は完了。

仮想サウンドカードをインストールする

  1. NETDUETTO をダウンロードして、インストール

恋声 (無料ボイスチェンジャー) をインストール

  1. サービス終了のお知らせ をダウンロードして、インストール
  2. 恋声を起動
    • koigoe(x64).exe を実行
  3. バイス設定を変更
  4. 入力をマイクに設定
  5. 声質を調整
    • お好みに
  6. 起動したままにする

バイス設定を変更。

FaceRig のサウンド設定を変更

  1. 入力を仮想サウンドカードに変更

以上で音声の設定は完了。

Skype の設定

  1. FaceRig の仮想デバイスに映像を出力させる
    • ブロードキャストに切り替え
  2. 映像は FaceRig の仮想デバイスから入力、音声は仮想サウンドカードから入力にする

FaceRig の仮想デバイスに映像を出力させるには、ブロードキャストに切り替える。 リップシンクに切り替えると音声に合わせて口が動くようになる。

Skype の映像と音声の入力を変更する。

プログラム用のきれいな等幅フォント

2011.12.08: MacBook Air に環境構築。
2016.11.20: MacBook Pro 導入に伴って、再度インストールしました。内容は更新されています。

表題の件で何かないかと探したら、Ricty というフォントがあるそうな。早速入れてみました。

詳しいインストール方法は Ricty フォントのページに書かれています。

プログラミング用フォント Ricty

以下はインストール記録です。

前準備として、必要になるコマンドをインストールします。

Homebrew というパッケージ管理システムをインストールします。
インストール方法は Homebrew に書かれています。

```bash
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

次に Homebrew を使って FontForge をインストールします。

```bash
$ brew install fontforge --use-clang
```

これで前準備は完了。次はフォントファイルと生成スクリプトプログラミング用フォント Ricty 内のリンクを辿ってダウンロード。

  • Inconsolata.otf
  • Inconsolata.zip
  • migu-1m-20150712.zip
  • ricty_generator.sh
  • ricty_discord_converter.pe

まず、ダウンロードしたファイルを一つのディレクトリに展開します。展開したディレクトリで ls コマンドを実行した結果です。

```bash
$ ls
Inconsolata-Bold.ttf migu-1m-regular.ttf
Inconsolata-Regular.ttf mplus-TESTFLIGHT-060
ipag00303 ricty_discord_converter.pe
migu-1m-bold.ttf ricty_generator.sh
```

続いて、Ricty 生成スクリプトを実行します。

```bash
$ bash ricty_generator.sh Inconsolata-Regular.ttf Inconsolata-Bold.ttf migu-1m-regular.ttf migu-1m-bold.ttf
```

実行が完了すると、Ricty ディレクトリに以下のファイルが生成されます。

  • Ricty-Bold.ttf
  • Ricty-Regular.ttf
  • RictyDiscord-Bold.ttf
  • RictyDiscord-Regular.ttf

これらのファイルを Finder でダブルクリックして、フォントをインストールします。

プログラミング用フォント Ricty に合わせて以下のフォントもインストールします。

  • Inconsolata-Regular.ttf
  • Inconsolata-Bold.ttf
  • migu-1m-regular.ttf
  • migu-1m-bold.ttf

以上で完了です。

参考:
http://knagayama.net/blog/2011/07/27/generate-ricty-font/
http://d.hatena.ne.jp/gar_sue/20111112/1321131923
http://d.hatena.ne.jp/hiroe_orz17/20111113/1321168274