Raspberry Pi Zero を USB ケーブル 1 本で遊ぶ
概要
Raspberry Pi Zero をディスプレイ、ネットワークアダプタなしで使用する方法です。 類似タイトルの記事がいくつかあったので、それらの記事に倣っています。 2016-11-25 版の Raspbian では ssh がデフォルト off となっているため、ssh を有効化する設定を追記しています。
確認環境
- Raspberry Pi Zero
- RASPBIAN JESSIE LITE 2016-11-25
- MacBook Pro 2016 Late
- macOS 10.12
- MacBook Air 2011 Mid
- MacBook Pro 2016 Late にSDカードスロットがないため、SDカード書き込み用として使用
参考情報
- Raspberry Pi ZeroをUSBケーブル1本で遊ぶ | Japanese Raspberry Pi Users Group
- Raspberry Pi ZeroをUSBケーブル1本で遊べるようにする - Qiita
- Raspberry Pi • View topic - RASPBIAN JESSIE LITE 2016-11-25 ssh turned off
- 2016-11-25 RASPBIAN JESSIE はデフォルトで ssh が off だよという話
- A security update for Raspbian PIXEL - Raspberry Pi
- 2016-11-25 RASPBIAN JESSIE のセキュリティアップデート情報
- Release Notes
- 2016-11-25 RASPBIAN JESSIE の ChangeLog
- Raspberry PiへのOSインストールの手順 ddコマンド編 | Very Berry Pi
- SDカードへの書き込み
解説
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)
参考情報
- Windows8.1 パーティションを移動してHDD領域の余りを使う: 家庭部PC科
- 日本語で書かれた記事。わかりやすいが確認方法に問題があると思われる。
- https://msdn.microsoft.com/ja-jp/library/hh825089.aspx
- Microsoft 公式
- https://msdn.microsoft.com/ja-jp/library/hh825686.aspx
- Microsoft 公式
解説
全体の手順は以下の通り。
- 回復パーティションにドライブレターを割り当てる
- 回復イメージを保存する
- 回復パーティションを削除する
- 回復ドライブを作成できないことを確認する
- C ドライブを拡張する
- 新規パーティション(回復パーティションになる)を作成する
- 回復パーティションに設定する
- 回復パーティションのドライブレターを削除する
- 回復ドライブを作成できることを確認する
コマンドは全て管理者として実行する。
回復パーティションにドライブレターを割り当てる
回復パーティションにドライブレター 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
参考情報
- How do I debug a gradle/Spring-boot app in IntelliJ Idea ? https://github.com/Muhuru-Bay-Microgrid/muhuru-bay-dashboard - #3 by Herick_Oliveira - Old Forum - Gradle Forums
- configuration で Remote を選んでね、と書かれている。
- Spring Boot Reference Documentation
- 起動では --debug-jvm オプションを付ける。
解説
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 の使い方。日本語。
内容
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 に環境構築しました。
確認環境
- MacBook Pro (13-inch, Late 2016)
- VMware Fusion 8.5
- RAM 8GB
- Windows 10 Pro (x64)
参考情報
- Windows 仮想マシンで Apple iSight カメラを使用する
- VMware でカメラを使用する
- 中の人(二次元)になる方法【FaceRig × Live2D × Unity × OBS × AVVoiceChanger × 気合】 - Qiita
- FaceRig の使用方法
- http://ch.nicovideo.jp/marth/blomaga/ar337868
- 音声を Skype に出力する方法
解説
映像の設定、音声の設定、映像と音声を組み合わせて Skype に出力する手順で構築する。
仮想マシンのカメラを有効にする
- 仮想マシンをシャットダウン
- 設定からカメラを追加
以下、設定からカメラを追加する手順。
FaceRig をインストールする
- Windows 10 を起動
- Steam, The Ultimate Online Game Platform から Steam をダウンロードして、インストール
- Steam を起動して FaceRig と Live2D Module をインストール
- FaceRig を起動する
- LAUNCH しようとするとエラーが表示されるので、OPTIONS から設定を変更 (DX11 ではなく DX9 を使用)
- アドバンス UI に変更する
- 高度なトラッキングの設定から、カメラデバイスの指定を変更
- VMware Virtual USB Video Device
- アバターの設定を変更
- 自動調整を実行
- 頭ポーズの(早い)自動調整
- 表情の(早い)自動調整
以下、画像で手順を説明する。
Steam で FaceRig と Live2D Module をインストール。
FaceRig を起動。
アドバンス UI に変更。
カメラデバイスの指定。
アバター設定。
自動調整。
以上で映像の設定は完了。
仮想サウンドカードをインストールする
- NETDUETTO をダウンロードして、インストール
恋声 (無料ボイスチェンジャー) をインストール
- サービス終了のお知らせ をダウンロードして、インストール
- 恋声を起動
- koigoe(x64).exe を実行
- デバイス設定を変更
- 入力はマイク、出力は仮想サウンドカード
- 入力をマイクに設定
- 声質を調整
- お好みに
- 起動したままにする
デバイス設定を変更。
FaceRig のサウンド設定を変更
- 入力を仮想サウンドカードに変更
以上で音声の設定は完了。
Skype の設定
FaceRig の仮想デバイスに映像を出力させるには、ブロードキャストに切り替える。 リップシンクに切り替えると音声に合わせて口が動くようになる。
Skype の映像と音声の入力を変更する。
プログラム用のきれいな等幅フォント
2011.12.08: MacBook Air に環境構築。
2016.11.20: MacBook Pro 導入に伴って、再度インストールしました。内容は更新されています。
表題の件で何かないかと探したら、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 内のリンクを辿ってダウンロード。
まず、ダウンロードしたファイルを一つのディレクトリに展開します。展開したディレクトリで 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
```
```bash
$ bash ricty_generator.sh Inconsolata-Regular.ttf Inconsolata-Bold.ttf migu-1m-regular.ttf migu-1m-bold.ttf
```
実行が完了すると、Ricty ディレクトリに以下のファイルが生成されます。
これらのファイルを 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