拡張可能な 4TB のNASサーバをほぼ2万で
秋月電子 でRaspberryPi4 4GB 届いたので既存の NAS サーバ(12V-3A)で立ててたサーバが、5V 4A という若干の低電力化を狙って…というか前のNAS(ネットワークストレージ)が ACER の e-machines で流石に古すぎて限界近かったから…
ちなみに、購入は 秋月電子 か スイッチサイエンス から買ってください。
というのも、Amazon は初期不良とかあると色々不便だけど、秋月電子などの専門店なら問い合わせ保証しやすいので、電子工作機器ならこういうところの方が何かあったときのために便利です。(まして首都圏なら秋葉行けば直接やり取りもできるしね…)
使ったのはほぼほぼコレ。
NAS サーバ自体は 1 万円で済んでます。
- ラズパイ4スターターキット 4GB版: マイコン関連 秋月電子通商-電子部品・ネット通販 : 10,000 円
外部 HD はバルクHD 探せば 6T 1万で用意できるけど、今回は昔から使ってる外部HDを利用。
なので 3T だけど
で足して2万。
ただし前提として、USBのマウス/キーボード+HDMIディスプレイは持ってるものと仮定します。(セットアップに使ったらそのあとは使いません)
ラズパイセットアップ:OS インストール
まず真っ先にやるのが Raspberry pi の OS インストール。
公式サイト から、Raspberry Pi Imager を自分の PC にインストールします。
起動するとこんな感じ
OS 指定して
このまま SD カード選択して、
インストール。
これだけ。
起動
セットアップウィザード
っても、SDカード差して、キーボード・マウス挿して、ディスプレイ挿したあとで電源ケーブルを挿すだけ。
ラズパイに電源スイッチとかないので、電源接続=起動です。
こういうときにしれっと役立つのがモバイルディスプレイで、自分はコレ使ってます。
もともと外部で勉強会に持って行く用だったのですがコロナでは…lllorz
ASUS MB16AHP モバイルモニター モバイルディスプレイ 薄さ9mm・軽量860g、USB/HDMIで簡単接続 15.6インチ フルHD IPS バッテリー内蔵
- 発売日: 2019/09/20
- メディア: Personal Computers
ちなみに、これは micro HDMI 接続で、ラズパイ4 が MicroHDMI です。
Micro - Micro ケーブルは中々手に入らないので、事前にこんなのも買っておきました
ELECOM タブレットPC用HDMI変換アダプタ HDMI-micro端子 TB-HDADBK
- 発売日: 2012/07/20
- メディア: Personal Computers
で、セットアップに戻りますが、最終的に ssh でしか扱わないので、日本語にして文字化けされるととっても面倒。
よってセットアップ時は、ロケールを日本語に指定はするものの、英語を使用するように設定しましょう。
セットアップ時に「 Use English language」のチェックボックスが出たら迷わずチェックして進みましょう。
Wifi は使いたければどうぞ。
その他セットアップ
セットアップができたら、ラズパイのアイコンから、「Configuration > Raspberry Pi Configuration」を指定して起動し、SSH を有効化します。
ついでに インターフェースを CLI にしてしまいましょう。
どうせそろそろお役御免です。
ここまでやったら、Terminal を起動して
ifconfig
を実行し、IP/MAC をメモします。
要するに SSH 先と、IP 固定用の MAC アドレスですね。
ローカルのIPアドレスを固定
これはルータ設定で行います。
ルータの種類によって設定方法が違いますので、ざっくりです。
ちなみに自分は BUFFALO で、「詳細設定」から「LAN > DHCPリース」から設定しました。
ここでは仮に、192.168.11.2 とでもしたとします。
ここまでやったら
sudo reboot
でしれっと再起動。
NAS 化の道
ディスクの用意
外部HDをぶっさすとLinux内部にログが残る。
因みにUSBディスクはかなり古い奴なので紹介なし。
$ dmesg $ dmesg [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.4.51-v7l+ (dom@buildbot) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1333 SMP Mon Aug 10 16:51:40 BST 2020 [ 0.000000] CPU: ARMv7 Processor [410fd083] revision 3 (ARMv7), cr=30c5383d [ 0.000000] CPU: div instructions available: patching division code [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache [ 0.000000] OF: fdt: Machine model: Raspberry Pi 4 Model B Rev 1.2 [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] Reserved memory: created CMA memory pool at 0x000000001ec00000, size 256 MiB [ 0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool [ 0.000000] On node 0 totalpages: 1012736 ...中略 [ 9.090856] scsi 0:0:0:0: Direct-Access Hitachi HDS723030ALA640 MKAO PQ: 0 ANSI: 5 [ 9.125766] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 9.139537] sd 0:0:0:0: [sda] 732566624 4096-byte logical blocks: (3.00 TB/2.73 TiB) [ 9.143212] sd 0:0:0:0: [sda] Write Protect is off [ 9.143235] sd 0:0:0:0: [sda] Mode Sense: 28 00 00 00 [ 9.144028] sd 0:0:0:0: [sda] No Caching mode page found [ 9.144045] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 9.199839] sda: sda1 ...以下略
sda
として認識したらしい。
以前から NAS として使っていたので、パーティションが残っているご様子。
これを機にクリーンにしちゃうかー(と Windows で内容をバックアップ。Ext2Fsd Project を使うとWindowsからext3のドライブが読み込める)
パーティション切りなおすかな
$ sudo fdisk /dev/sda pi@raspberrypi:~ $ sudo fdisk /dev/sda Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): m Help: DOS (MBR) a toggle a bootable flag b edit nested BSD disklabel c toggle the dos compatibility flag ...中略
パーティション情報の確認
Command (m for help): p Disk /dev/sda: 2.7 TiB, 3000592891904 bytes, 732566624 sectors Disk model: HDS723030ALA640 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x46a914da Device Boot Start End Sectors Size Id Type /dev/sda1 63 732563999 732563937 2.7T 83 Linux
変える必要なさそうなんだよなぁ(汗
まぁ練習がてら消すか
Command (m for help): d Selected partition 1 Partition 1 has been deleted. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (256-732566623, default 256): Last sector, +/-sectors or +/-size{K,M,G,T,P} (256-732566623, default 732566623): Created a new partition 1 of type 'Primary' and of size 2.7 TiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
ということで、削除→新規→保存 を実行。
まぁBootパーティション作るわけでもないしね。
で、フォーマット
$ sudo mkfs.ext4 /dev/sda1 mke2fs 1.44.5 (15-Dec-2018) Found a dos partition table in /dev/sda1 Proceed anyway? (y,N) y Creating filesystem with 732566368 4k blocks and 183148544 inodes Filesystem UUID: 3c17655a-88a1-473d-b8cc-27b679af558b Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done
openmediavaultのインストール
NAS 化するだけなら、SMB インストールして終了なのだけど、openmediavault なるものが流行りなのでやってみた。
ただし、そのままインストールするわけにもいかないらしい…がそこは他人の力を借りる。
便利便利
$ curl -sSL https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
ポーンとコピペして 30 分位放置。
で、インストール後に IP アドレスたたくと
デフォルトアカウントは admin/openmediavault なので、これでログイン。
とりあえずユーザの設定、Linux ユーザが基本で列挙されているので、好きにするといいよ。
というかここからユーザ管理できるとかかなり楽になりましたね…
SMB をインストール
この時点で、すでに接続はできる
ディスクを認識させて
パーティションを認識させます。
一応ここでマウントしてしまいましょう。
共有フォルダを作成して
SMB の共有に設定
この時点で
わーい
因みに速度ですが R:35MB/s W:29MB/s な感じで、(古いストレージでUSB2.0なのでその辺がボトルネックになってるのかも)動画を再生したりに不自由ないレベルです。
放熱についても、手で持ってほんのりあったかい程度。NAS程度なら 40度位で済んでるっぽいので、ヒートシンクもいらない感じです。
電力は 5V3A = 15W と 電球より低いぜ ひゃっほう!
複数のインストール済み Java を速攻で切り替える jenv
つってもそんなに難しい話はない。
Install
$ brew install jenv
Homebrew 知らない人はこっち。
brew.sh
ちなみに Windows だと jenv.io なるサイトで Windows で動く Jenv 頑張ってたらしいのだけど、消えていた(2020/09/20 現在)。
インストールされると、実質 ~/.jenv
以下にインストールされます。
インストール後は .bash_profile
か zsh
の場合は ~/zprofile
に次の文言を追加
eval "$(jenv init -)"
pyenv とかと違って、こいつ自体に Java インストール機構はない。文字通り環境切り替えよう。
で、登録に関しては /usr/libexec/java_home -V
でインストール済み JavaHome ディレクトリを検索。
$ /usr/libexec/java_home -V Matching Java Virtual Machines (2): 14.0.1, x86_64: "OpenJDK 14.0.1" /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home 11.0.5-zulu-11.35+15, x86_64: "Zulu 11" /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
このパスを利用して
$ jenv add /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home openjdk64-14.0.1 added 14.0.1 added 14.0 added 14 added
こうすると追加される。
で、この切替を行うにあたっては
$ jenv versions system 11.0 11.0.2 14 14.0 14.0.1 openjdk64-14.0.1 * zulu64-11.0.2 (set by /Users/armeria/.jenv/version) $ jenv --help jenv 0.5.4 Usage: jenv <command> [<args>] Some useful jenv commands are: commands List all available jenv commands local Set or show the local application-specific Java version global Set or show the global Java version shell Set or show the shell-specific Java version rehash Rehash jenv shims (run this after installing executables) version Show the current Java version and its origin versions List all Java versions available to jenv which Display the full path to an executable whence List all Java versions that contain the given executable add Add JDK into jenv. A alias name will be generated by parsing "java -version" See `jenv help <command>' for information on a specific command. For full documentation, see: https://github.com/jenv/jenv/blob/master/README.md $ jenv global openjdk64-14.0.1 $ java --version openjdk 14.0.1 2020-04-14 OpenJDK Runtime Environment (build 14.0.1+14) OpenJDK 64-Bit Server VM (build 14.0.1+14, mixed mode, sharing)
とまぁこんな感じ。
11 依存のプロダクトと、14 対応の OSS を使うときに切り替えとしては便利です。
マジで日記
データサイエンス系の勉強しようと思ったんですよ、そしたらですね、Windows の標準 JIS キーボード配置が気に入らないのです…。
日本語文章打つ分には JIS 配置で問題ないのだけど、_?>
とか記号打ち始めると凄く気になる…しかもこのあたりって、開発で良く使うキーなんですね。
Windows 一辺倒で慣れてるとそれでも気にはならないのですが、あいにくと私は仕事で Mac 使ってまして…(Windows はゲームと環境依存確認用)なので、結局 MacBook に舞い戻ってしまったのです。
その MacBookPro も独自 CPU 積むとかなんとか…しかもそれ向け Mac だと Home brew とかでエラーが出るとかなんとか…
うぉぉおおおおお(TT
Xcode 問題は新しいやつ入れれば問題なく動くらしいのだけど、仮想化全滅はないわー…
Arm 系CPUに対応しようとすると、ある意味仕方ない気はするのだけど、悪いけど X86-IA64 系でマトモに仮想化ができるアプデ(+X86 Mac)出てこない限り乗り換えもアプデもする気になれませんね…
真面目な話、iOS 以外の開発者的には Docker はキラーコンテンツなり得る。
これが動かないなら真面目に Mac の利用終了を検討するレベルだと思う。
BSD ベース OS が動き続ける以上は Web 開発者は一定数残っていられるとは思うのだけど…
というか Intel 切ったらしいとすれば、Ubuntu 乗り換え待ったなしなんだよなぁ…。
Ubuntu compatibility な Windows ノートでキー配置も含めて納得行くマシン探すしかないのか…|||orz
プログラム言語の源流をざっくり
目標
プログラムってどう動いてるの?なんでプログラム言語なんてものが必要なの?を理解する。
それが分からないとプログラミング言語のありがたさなんてわからないんで…
初めに 0 と 1 がある
とは皆聞いたことがあるはずだ。プログラムは全部 0 と 1 で動いているんだと。
でも誰も実感なんてできないはずだ。
そこで、死ぬほど単純な 1+1 の結果を表示するプログラムをコンパイルして、その中身を 01 表示する。
長いので一部抜粋するけどこんな感じになる。
010011010101101010010000000000000000001100000000000000000000000000000100000000000000000000000000111111111111111100000000000000001011100000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110000000000000000000000000000000111000011111101110100000111000000000101101000000100111001101001000011011100000000001010011001100110100100001010101000110100001101001011100110010000001110000011100100110111101100111011100100110000101101101001000000110001101100001011011100110111001101111011101000010000001100010011001010010000001110010011101010110111000100000011010010110111000100000010001000100111101010011001000000110110101101111011001000110010100101110000011010000110100001010001001000000000000000000000000000000000000000000000000000000000001000000010011000011111000000010000001000010110101010000010100010000010000101101010100000101000100000100001011010101000001010001000011010101010111000011010100010000111000101101010100000101000111111100010111010101010101010000000101110010110101010000010100011111110001011101010101000101000000001000001011010101000001010001111111000101110101010011010100000000010100101101010100000101000111111100010111010101000101010000000000010010110101010000010100010101111101000101010100010101000000000110001011010101000001010001000001000010110101010001010100010010101100101101010100000101000110110011010111000101100101010000000001010010110101010000010100011011001101011100101011110101000100000101001011010101000001010001101100110101110001010010010100000000010100101101010100000101000101010010011010010110001101101000000001000010110101010000010100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000010001010000000000000000010011000000000100000101000000000010101011011111011001000101111100000000000000000000000000000000000000000000000000000000000000001110000000000000000000100000000100001011000000010000111000011011000000000000111000000000000000000000000000010100000000000000000000000000000000000000000000000000011010010001001000000000000000000000000000010000000000000000000000000000001000000000000000000000000000000000000001000000000000000000000000010000000000000000000000000000000000100000000000000000000001100000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001100000000010000001000000100000000000000000001000000000000000000000001000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110000100101000000000000000010110100000000000000000000000000000000000100000000000000000000001110000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000101000000000001000000000000000000000000001000010000000000000000011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000000100001000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
うん、読めたもんじゃねぇ。
これでもルールはある(ってかないとコンピュータだって読めない)のだけど、ホント無理。
因みに、初期のコンピュータはこの 0/1 を紙に穴を開けて読み込ませてたらしい。
その頃のコンピュータは表現も何も数字と、かろうじてアルファベットしか返せなかったから、それでもやってやれなくはなかったそうだ…
Pandas の入門にいいかも?
秀和さんホントいい本出しますね。
本の概要
データサイエンスって、手法は一通り調べはしたんだけど、そこからどう応用すればいいんだろう?
そう思ったときに必要なのは何かと考えてみると
現実同様に正規化できてないデータ だったり、 目的とその達成までの考え方 あたりは教科書では中々教えてくれません。
この本はまさにこの部分を手を動かして実感する本です。
ポイント
氏名の書き方の揺れ、全角半角の揺れ、日付の書式揺れなどや、データ欠損の補完。
実務的に機械学習を利用した、ユーザの継続/解約予測、利用回数予測などの各種予測といった、実際に実務でやりたいであろう予測の仕方を説明しています。
Kaggle *1 でも学ぶことはできますが、日本語で十分な説明付き手順があるというのは非常に日本人としてはありがたい。
第一章の使い方
全部書くと、本のネタバレにしかならない気がするので、先頭 10 本のみ。
pandas の使い方を実際にデータいじりながら説明してくれるので、基本と実践が同居してるとてもいい本…というのが個人的印象。
import pandas as pd customer_master = pd.read_csv('datas/customer_master.csv') customer_master.head()
customer_id | customer_name | registration_date | customer_name_kana | gender | age | birth | pref | ||
---|---|---|---|---|---|---|---|---|---|
0 | IK152942 | 平田 裕次郎 | 2019-01-01 00:25:33 | ひらた ゆうじろう | hirata_yuujirou@example.com | M | 29 | 1990/6/10 | 石川県 |
1 | TS808488 | 田村 詩織 | 2019-01-01 01:13:45 | たむら しおり | tamura_shiori@example.com | F | 33 | 1986/5/20 | 東京都 |
2 | AS834628 | 久野 由樹 | 2019-01-01 02:00:14 | ひさの ゆき | hisano_yuki@example.com | F | 63 | 1956/1/2 | 茨城県 |
3 | AS345469 | 鶴岡 薫 | 2019-01-01 04:48:22 | つるおか かおる | tsuruoka_kaoru@example.com | M | 74 | 1945/3/25 | 東京都 |
4 | GD892565 | 大内 高史 | 2019-01-01 04:54:51 | おおうち たかし | oouchi_takashi@example.com | M | 54 | 1965/8/5 | 千葉県 |
transaction_1 = pd.read_csv('datas/transaction_1.csv')
transaction_1.head()
transaction_id | price | payment_date | customer_id | |
---|---|---|---|---|
0 | T0000000113 | 210000 | 2019-02-01 01:36:57 | PL563502 |
1 | T0000000114 | 50000 | 2019-02-01 01:37:23 | HD678019 |
2 | T0000000115 | 120000 | 2019-02-01 02:34:19 | HD298120 |
3 | T0000000116 | 210000 | 2019-02-01 02:47:23 | IK452215 |
4 | T0000000117 | 170000 | 2019-02-01 04:33:46 | PL542865 |
*1:というか他の人の考えや手順も学ぶという意味ならKaggleの方がサンプルは多い
Unity の Humanoid モデルを VRM モデルに変換してみた
目的
Humanoid モデルを VRM モデルに変換して、VirtualMotionCapture でいじれる様にしようか。
尚、説明レベルは「Unityとか名前しか知らない」レベルで。
基本的に、Booth 等で販売されてるモデルは Humanoid*1 ベースが殆ど。
というのも、現実的に VRM 形式だと変更/修正などが容易ではなく、カスタムして使うということが実質不可能だからだと思われる。
(なんかやる方法探せばないこともなさそうではあるけど…)
因みに、著作権の問題から、変換モデルの配布とかはしないので、試す人は買ってどうぞ。
ざっくり流れ
事前準備
- Unity を用意しましょう。(この記事を書いてる時のバージョンは 2019.4.9f)
unity.com - Uni-VRM をダウンロードしておきましょう。検証したバージョンは「0.59.0_873a」で、バージョンアップで使えなくなってたらメンゴ
Releases · vrm-c/UniVRM · GitHub - Humanoid モデルを用意しましょう
3Dキャラクターに関する人気の同人グッズ6221点を通販できる! - BOOTH
尚、利用規約に改変が可能かはきっちり見てください。
自分が買ったのはコレ。
booth.pm
(アルビノっ子大好きなので)
*1:Humanoidは、人型のモデル用に作られたモーションを他の人型モデルにも適用できるようにする仕組みです。 【Unity】Humanoid / Genericアニメーションについての基礎知識 - LIGHT11
VRゲームに自分の姿を好きなキャラモデルで表示して撮影する
目標
この記事で目指すところ
事前準備
- VR機器(Vive なら全身キャプも可能)
これがそこそこ値が張る。注意点はあくまで PC 用VR機器。
WindowsMR は試したという報告が無いので不明。とりあえず 【国内正規品】 HTC VIVE PRO 【Amazon.co.jp限定】オリジナルPC壁紙配信 付 (10万↑) と Oculus Rift S PC接続専用 高性能VRヘッドセット&コントローラー (5万ちょっと)はまず確定で動くっぽい。
因みに、Oculus は本体センサー方式なので、時間経過で座標の測定誤差が増えてくるらしい。 - そこそこ良いマシン
個人的な印象では GeforeceGTX1060 位は最低欲しい。ソフトによるけど。
1060 は流石にもう在庫がないだろうし、1660 が 3 万切ってる感じでした
以上です。
ざっくり流れ
1. VRゲームと LIV を入れる
基本的に Steam 対応の VR ならそれなりにいけるっぽい。
ということで BeatSaber
加えて、LIV (無料)を入れる
ちょっと説明すると、LIV というツールは以下の機能がある。
起動順序は LIV が先で、「LIV コンポジターをスタートする」(コンポジッターとは、合成機って意味)
起動するとこんな感じ
「シンクロとスタート」を押すと、ゲームが起動します。
この時真っ黒の画面に映像が映ります。
これが LIV のVR中カメラ映像ですね。
ここでカメラ調整とかしたくないので、ゲームだけ修了します。
実写映像を合成するならこのままできますが…まぁ放置で。
2, VRM モデルを用意する
手段はいくつかありますが
- VroidStudio とかで自作する
https://vroid.com/studio/ - Unity の Humanoid モデルを変換する
VRM モデルをガチで作りたい人は コレ 見て頑張ってください。
俺はあきらめたよ… - VroidHub から適当なフリー VRM を拾ってくる。
https://hub.vroid.com/ - Booth で VRM のモデルを買う
因みに、VroidStudio で使えるテクスチャとか有償無償含めて転がってるので、見てみるといい - ニコニコ立体 からライセンスを確認しつつ使う
ライセンスに関しては慎重に。私はサイトは紹介しますが、利用は自己責任で。
因みに私は Booth から素材を集めつつ、VroiStudio で自作しました。
VroidStudio で一旦エクスポートした VRM モデルは編集できないので、服装とか変える場合はその度にエクスポートしましょう。