技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

複数のインストール済み Java を速攻で切り替える jenv

つってもそんなに難しい話はない。

Install

Mac なら brew だよね。

$ brew install jenv

Homebrew 知らない人はこっち。
brew.sh

ちなみに Windows だと jenv.io なるサイトで Windows で動く Jenv 頑張ってたらしいのだけど、消えていた(2020/09/20 現在)。

インストールされると、実質 ~/.jenv 以下にインストールされます。
インストール後は .bash_profilezsh の場合は ~/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 とかでエラーが出るとかなんとか…

yusukeiwaki.hatenablog.com

うぉぉおおおおお(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 email 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 形式だと変更/修正などが容易ではなく、カスタムして使うということが実質不可能だからだと思われる。
(なんかやる方法探せばないこともなさそうではあるけど…)

因みに、著作権の問題から、変換モデルの配布とかはしないので、試す人は買ってどうぞ。

ざっくり流れ

  1. Unity でプロジェクトを作成して、プラグインを突っ込む
  2. お目当てのHumanoidモデルを読み込む
  3. VRM 用にモデルを編集する
  4. VRM エクスポート

事前準備

  1. Unity を用意しましょう。(この記事を書いてる時のバージョンは 2019.4.9f)
    unity.com
  2. Uni-VRM をダウンロードしておきましょう。検証したバージョンは「0.59.0_873a」で、バージョンアップで使えなくなってたらメンゴ
    Releases · vrm-c/UniVRM · GitHub
  3. Humanoid モデルを用意しましょう
    3Dキャラクターに関する人気の同人グッズ6221点を通販できる! - BOOTH
    尚、利用規約に改変が可能かはきっちり見てください。

自分が買ったのはコレ。
booth.pmアルビノっ子大好きなので)

*1:Humanoidは、人型のモデル用に作られたモーションを他の人型モデルにも適用できるようにする仕組みです。 【Unity】Humanoid / Genericアニメーションについての基礎知識 - LIGHT11

続きを読む

VRゲームに自分の姿を好きなキャラモデルで表示して撮影する

目標

この記事で目指すところ

youtu.be

事前準備

以上です。

ざっくり流れ

  1. VRゲームと LIV を入れる
  2. VRM モデルを用意する
  3. VirtualMotionCapture を突っ込む
  4. LIV に VirtualMotionCapture 映像を設定
  5. OBS で録画する

1. VRゲームと LIV を入れる

基本的に Steam 対応の VR ならそれなりにいけるっぽい。
ということで BeatSaber

store.steampowered.com

加えて、LIV (無料)を入れる

store.steampowered.com

ちょっと説明すると、LIV というツールは以下の機能がある。

  1. VR ゲーム中にカメラを配置してゲーム内の映像を表示できる
  2. 現実のWebカメラの映像を取り込む
  3. 上記二つの映像をクロマキーで合成する

起動順序は LIV が先で、「LIV コンポジターをスタートする」(コンポジッターとは、合成機って意味)

f:id:white-azalea:20200829122241p:plain

起動するとこんな感じ

f:id:white-azalea:20200829123006p:plain

「シンクロとスタート」を押すと、ゲームが起動します。
この時真っ黒の画面に映像が映ります。
これが LIV のVR中カメラ映像ですね。

f:id:white-azalea:20200829124913p:plain

ここでカメラ調整とかしたくないので、ゲームだけ修了します。
実写映像を合成するならこのままできますが…まぁ放置で。

2, VRM モデルを用意する

手段はいくつかありますが

  • VroidStudio とかで自作する
    https://vroid.com/studio/
  • Unity の Humanoid モデルを変換する
    VRM モデルをガチで作りたい人は コレ 見て頑張ってください。
    俺はあきらめたよ…
  • VroidHub から適当なフリー VRM を拾ってくる。
    https://hub.vroid.com/
  • BoothVRM のモデルを買う
    因みに、VroidStudio で使えるテクスチャとか有償無償含めて転がってるので、見てみるといい
  • ニコニコ立体 からライセンスを確認しつつ使う
    ライセンスに関しては慎重に。私はサイトは紹介しますが、利用は自己責任で。

因みに私は Booth から素材を集めつつ、VroiStudio で自作しました。
VroidStudio で一旦エクスポートした VRM モデルは編集できないので、服装とか変える場合はその度にエクスポートしましょう。

続きを読む

『「考える技術」と「地力頭」がいっきに身につく東大思考』を読んでみた

超ざっくり概要

この本は、東大生のような優秀な頭脳といわれる人間たちがどの様に思考し、また自分たちがどうすればその様な考え方ができるのかを教えてくれる本である。

超ざっくり要点

要点1 : 生まれ持った才能ではない

東大生は生まれがすごいとか、持って生まれた才能とかではない。
考え方が違うから、芋づるで学習効率がバカ高いのだ。

凡人とてそれが一切出来ない訳ではない。
意識的に練習していくことでそれを鍛えることができる。

要点2: 物事の本質をとらえることができるから学習効率もいいし、問題解決能力だって高い

物事や情報には必ず本質がある。
歴史的出来事には背景や原因があるし、単語なら派生元の語源の意味に引きずられるし、手段の前に目的はあり、ひらめきの前に視点がある。

本質を捉えることで、記憶も応用も解決もやりやすくなる。
そのためには以下の思考方法を行う。

  • 原因思考: すべての事に原因があると考え深掘りすること
  • 上流思考: すべての出来事にはそれに至る経緯が存在することを理解し、源流を見つけること
  • 目的思考: すべての手段には目的が存在するので、目的を追う事で、どうしてその手段を取るのかを理解する
  • 裏側思考: ある情報に対して、必ず複数の視点(極論すると対立・反対の視点)で検証する

感想

実践や練習課題大好き、実際に行ってみて覚えるタイプの人にハマり。
(というか自分がそれ系なので、体感できる系の本しか気力が沸かない)

技術書を読むような人(技術書展行くような人)なら、読んだ後直ぐに試したくなる系の本です。
内容も練習課題的なものもあって、実際に調べながら・体感しながら進められるので、やり方説明も十分してくれます。