狐の嫁入りっていいよね

理系と芸術系になりそなった文系卒、コンピュータグラフィックスを学ぶ

モバイル端末でPC版Ankiの機能を使う

みんな大好きAnki

(Ankiユーザーには有用であると思いたいが)Ankiのマニアックな記事が続く。 そろそろAnki入門の記事も書きたいし、Ankiをまじめに触って一年なるのでその記事も書きたい。

この記事の趣旨

PC版Ankiにしか無い機能をモバイル端末(iPad 第六世代)で使えるようにした。 Androidタブレットでもいけると思う。

結論

Chrome リモートデスクトップ』というiOSアプリとGoogle chrome拡張機能がある。 それらを使い、iPadから自分のノートPCをリモートデスクトップで遠隔操作して、iPadでPC版Ankiの機能を使えるようにした。

iPadでノートPC(Windows10)を操作しているスクショ

なぜしたのか

後述するが、PC版Ankiにしか無い機能がとても便利なのだけど、私は勉強はいつもiPadでしている。 加えて、ノートPCを持ち歩くのが面倒なので事実上デスクトップPCになっている。

なので、図書館で勉強をした後、いつもPC版の機能を使うためだけにPCを起動する。 そしてPC版Ankiにしか無い機能を使用していた。そんなことがあり、常々iPadだけで作業を完結したいなあと思っていた。

そのため、今回少し強引ではあるがiPadでPC版Ankiの機能を使えるようにした。

詳細

AnkiはPC版(Win/Mac/Linux)、iOS版、Android版、Web版がある。

機能の多さ

機能の多さとしては

PC版(Win/Mac/Linux) >>> Android版 > iOS版 = Web版

くらいだと思う。PC版Ankiは拡張性と検索性において圧倒的に高性能である。

バイスによってできること/できないこと

PC版(Win/Mac/Linux) Android iOS Web版
ブラウザ機能 × ×
アドオン機能 × × ×
AnkiAPI ◯(Python) ◯(Java) × ×
単語帳の追加/削除
単語帳の復習

PC版は圧倒的に機能が多い。 その特色は二点ある。 1つは単語帳のブラウザ機能が豊富な点。 もう1つはアドオン拡張(≒AnkiAPIを使うこと)が出来る点。

以下これらの点について素晴らしいと思う所を述べたい。

ブラウザ機能

PC版(Win/Mac/Linux) Android iOS Web版
ブラウザ機能 × ×

PCでは登録してあるカードを検索できたり、一括変換ができる(正規表現も使える)。

Androidでも一応は検索機能はあるが、一括変換できない。

iPadとWeb版は検索機能すらない。

これは不便である。

アドオン機能

PC版(Win/Mac/Linux) Android iOS Web版
アドオン機能 × × ×

Ankiのアドオン機能こそがPC版とそれ以外における決定的な違いである。

アドオン機能とは、第三者がAnkiの機能を拡張できて、それをAnkiユーザーがダウンロードして使えるというもの。 Ankiアドオンはプログラミング言語Pythonで作る。

このアドオン機能、PC版でしか使えないが、大変完成度が高いものが多い。(アドオンを元に作った単語カードはモバイルでも使える)

ここでは特に有用なアドオンである Image Occlusion Enhancedを紹介したい。

Image Occlusion Enhancedっていうアドオンがすごい

このアドオン、なにがすごいってAnki上で暗記ペンが実現できること

クツワ STAD 暗記下敷 B5サイズ VS009R 赤

クツワ STAD 暗記下敷 B5サイズ VS009R 赤

誰しもが受験生時代に覚えたい箇所にこの緑色のマーカーを引いて赤いシートで覚えたことがあると思う。

これがAnki上でできるのがImage Occlusion Enhanced

しかも、Anki自体の機能である記憶に適切なタイミングでそのマーカーの部分を問題として出してくれる

例えば、この画像に対して、

以下のように任意の部分を隠して覚えることができる。

大ッ変に素晴らしい。

大ッ変に素晴らしいのだけど、このマーカーを引くのはPC版Ankiでしかできない。

そこでこの機能をiOSで使うために(半ば強引に)実現した。

選択肢を考えた

  • ラズベリーパイ3 zero wを使ってその中にankiをインストールして持ち歩いてSSH接続する
    • いや欲しいけど、いちいち持ち歩くの...?ってか電源は...?
  • Google Cloud Platformなりクラウド上でOSを起動してankiをインストールする
    • 選択肢として悪くはないが設定がめんどくさい。
  • 自分のノートPCを遠隔操作してiOSでankiを操作する

リモートデスクトップを導入した

ここらへんを参考にした。

「Chromeリモートデスクトップ」を使ってみる:簡単設定でPCからもAndroidからも大丈夫

おおまかな手順は

まずPC側でgoogleにログインした上で

google chromeで「Chromeリモートデスクトップ」拡張アドオンをインストールする

タブレットで使えるようにボタンを押して、PINコード(パスワード)を設定する

次にタブレット側で

③ 「Chromeリモートデスクトップ」アプリをダウンロードして、PINコードを入力するだけ。

これで遠隔操作ができるので、タブレット端末でPC版Ankiが使える。

AnkiでMarkdownファイルを読み込む

こんな感じで表示される。

f:id:lipton_lemontea:20180728223538p:plain

Markdown.apkgファイルのダウンロードはこちら

.apkgファイルのインポートの仕方はこちらを参考にしてください。

前提

Anki では以下の拡張子のみ読み込める。マークダウン形式は原則対応していない。(ちなみにPDFも非対応)

f:id:lipton_lemontea:20180728213339p:plain

上記表は画像、音声、動画などメディアファイルを Anki へ一括登録 - the Right Stuffより引用

今回JavascriptをいじることでWindowsでマークダウン形式のファイルを読み込むことができたのでそのメモを残す。

実行環境

Windows 10

Anki 2.0.51

Qt 4.8.4

PyQt 4.10

(Ankiアドオンの)JS-Boosterインストール済

カード

Marked.js で Markdown をクライアント側でパースして表示する を参考にJavascriptで作成した。

f:id:lipton_lemontea:20180728214808p:plain

表面のテンプレート

{{Front}}

{{Deck}}

書式

.card {
 font-family: arial;
 font-size: 20px;
 text-align: center;
 color: black;
 background-color: white;
}

.markdown {
 text-align: left;
}

裏面のテンプレート

<div class = "markdown" >
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="https://raw.githubusercontent.com/markedjs/marked/master/lib/marked.js"></script>
<script>
            $(document).ready(function(){
                var target = $("#markdown_content");

                $.ajax({
                    url: target[0].attributes["src"].value,
                }).success(function(data){
                    target.append(marked(data));
                }).error(function(data){
                    target.append("This content failed to load.");
                });
            });
        </script>



</div>

{{FrontSide}}
<br>

<hr id=answer>

{{Back}}

<hr>
{{Example}}
<hr>
{{Tags}}

使い方

AnkiアドオンのJS-Boosterインストールしたうえで、

①.markdownをメディアコレクションのディレクトリに置く

今回sample.markdownというファイルを使う。中身はシンプルで以下のようになっている。ダウンロードはこちらから

# markdowntest

- hoge
 - fuga

マークダウンファイルを WindowsならC:\Users\userxxx\AppData\Roaming\Anki2\userxxx\collection.media に置く。このディレクトリはAnkiで表示するメディアファイルを一括で置く場所。

登録するメディアファイルをメディアフォルダ (collection.media) に保存します。 既定のメディアフォルダは、 (書類, ドキュメントフォルダ)/Anki/(プロファイル名: ユーザー 1)/collection.media になります。サブディレクトリは使用できません。

画像、音声、動画などメディアファイルを Anki へ一括登録 - the Right Stuffより引用

②単語カードを追加する

下記のスクリーンショットの左上のように種類をmarkdownにする

f:id:lipton_lemontea:20180728221234p:plain

適当に問題文と答えを書いて、そのうえでBackにカーソル位置合わせて、Ctrl+Shift+XでHTMLを編集する。 その際に先ほど追加したsample.markdownを以下のようなタグで指定する。

<div class ="markdown" id = "markdown_content" src= "sample.markdown"></div>

f:id:lipton_lemontea:20180728223223p:plain

カードを追加しているときは何も表示されないが、とりあえず「閉じる」>「追加」を押す。

③ankiで学習する

markdown形式で表示される。

f:id:lipton_lemontea:20180728223538p:plain

メリット

マークダウンファイルでメモしたことをもとに解説を作成できる。 ファイルなので、どの単語カードからも呼び出すことが可能だし、内容の修正などをしても一括で書き換えができるのがメリット。

問題点

AnkidroidやiOS版Ankiでは非対応MacOSでは未確認。

原因としてはアドオンのJS Boosterがないと起動せず、アドオンはAnkidroidやiOS版Ankiではほぼ非対応だからだと思われる。 jQueryを使わずに普通のJavaScriptベースでマークダウンを表示ができるなら、AnkidroidやiOS版Ankiにも対応できると思う。要改善。

追記

iOS版Ankiに対応できた。

RedditAnki iOS Use javascript as in Anki Desktopを見ていたら

Try pasting the JavaScript from the library directly into a script section of your card template.

訳:ファイルを読み込めていないから直接ソースコードをテンプレートに打ち込んだらiOSでもいけるで

ということでiOS対応できた。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="https://raw.githubusercontent.com/markedjs/marked/master/lib/marked.js"></script>

の部分を直接ソースコードに変えたらいけた。でもAnkidroidではできなかった。なんでだろう。

f:id:lipton_lemontea:20180729000041p:plain

文系卒だけど独学でCGエンジニア検定エキスパートとCGクリエイター検定エキスパートにダブル合格した話

2018/7/8(日)にCG-ARTS協会主催のCGエンジニア検定エキスパートとCGクリエイター検定エキスパートをダブル受験した。

2018/8/3追記

CGエンジニア検定エキスパート CGクリエイター検定エキスパート 両方とも合格しました。

CGクリエイター検定の概要

https://www.cgarts.or.jp/kent,ei/about/creator/index.htmlwww.cgarts.or.jpより

CGエンジニア検定の概要

www.cgarts.or.jpより

なぜこの記事を書くのか

コンピュータグラフィックスを勉強したかったことと、文系かつ独学でCGエンジニア検定エキスパート(とCGクリエイター検定エキスパート)を受けたという記事がネットになかったから記事にした。

あったのは理系の人の記事だけで、中には10時間でCGエンジニア検定と画像処理エンジニア検定に受かったという人もいた。(両方ともエキスパート)

記事を伺う限り、頭脳明晰で大変優秀なお方で、むしろ凡人にとっては外れ値として扱うべきなのではないかとすら思う受験の記録であった。

残念ながら物覚えが悪い文系出の私にはあまり参考にならなかった。

そんな経緯があり、 「高校数学1Aまでしか履修していない文系卒が独学でCGエンジニア検定エキスパート(とCGクリエイター検定エキスパート)を受けてみたらどうなるのか?」、そう思い受験をし、両方とも自己採点で合格点が取れているようなので記事にした。

以下、 CGエンジニア検定エキスパートをCGE

CGクリエイター検定エキスパートをCGC と呼ぶことにする。

総勉強時間

2018年のGWくらいから一日大体約3hやっていた。直前期は諸々あり体調を崩したので1週間ほぼほぼできなかった。 なので、準備期間が2か月間、勉強時間が60日*3h=180hくらい。

内訳

  • CGE 150h
    • 新規 96h
    • 復習 34h
    • CGEに必要な数学 20h
  • CGC 30h
    • 新規 19h
    • 復習 11h

資格が欲しいというよりはCGの知識やロジックをしっかり理解して覚えたいという感じだったので、CGEの勉強量は多いのではないのかな。

CGC:CGE=1:5の割合で勉強したのに、悲しいことに点数はCGC>CGEだった。

復習でankiというアプリを使っているが、その復習の統計データがあるから載せておく。

CGエンジニア検定の復習データ

CGクリエイター検定の復習データ

メインで使った教材

CGE/CGCの公式のテキストと問題集。

CGクリエイター検定エキスパート・ベーシック公式問題集 [改訂第二版]

CGクリエイター検定エキスパート・ベーシック公式問題集 [改訂第二版]

CGエンジニア検定エキスパート・ベーシック公式問題集 [改訂第三版]

CGエンジニア検定エキスパート・ベーシック公式問題集 [改訂第三版]

ディジタル映像表現 -CGによるアニメーション制作- [改訂新版]

ディジタル映像表現 -CGによるアニメーション制作- [改訂新版]

コンピュータグラフィックス [改訂新版]

コンピュータグラフィックス [改訂新版]

数学の復習で使ったサブ教材

前提として私は高校が普通科ではなかったので、履修したのは数学1Aまで。数学2B以上は未履修。大学も私大文系であることに留意していただきたい。

必要になった数学の知識は

  • ①行列の基礎(未履修)
  • ②三角比
  • ③確率
  • 微分(未履修)
  • 偏微分(未履修)
  • ネイピア数(未履修)
  • ⑦ベクトル(未履修)

内、①~⑤を復習した。ベクトルはやっていない。あとΣも出てくるけど、Σは知っていた。

①~⑥はがっつりやったわけではないが「何をしているのか」だけをざっくり押さえた。

各知識の概念を抑えるために下記参考書を使った。

①行列の基礎(未履修)

マンガ 線形代数入門 (ブルーバックス)

マンガ 線形代数入門 (ブルーバックス)

この本の二章までの「行列の掛け算の求め方」まで理解できれば試験対策上は問題ないように思える。

「行列の掛け算は左の行列のヨコの要素とそれに対応する右の行列のタテの要素を順番に掛けて足すだけかあ」とだけわかればいい。

②三角比 ⑥ネイピア数(未履修)

スバラシク面白いと評判の初めから始める数学B

スバラシク面白いと評判の初めから始める数学B

単位円の代表角がなぜそうなるのかとかラジアンらへんを抑えればよい。

ちなみにこれと上記の行列の知識だけ理解し、教科書を読んだら、三次元同次座標におけるアフィン変換の問題は満点だった。

ネイピア数は exp1 = 2.718282...

円周率みたいなもので、かつ、n乗によって値が変わるんだなとだけ把握。 メタボールの公式で使う。

③確率

確率はネットの適当な記事でなんとかした。 パラメトリック曲線の一つであるベジェ曲線バーンスタイン基底関数にnCrが使われる。

微分(未履修)

マンガでわかる微分積分 微積ってなにをしているの?どうして教科書はわかりにくいの? (サイエンス・アイ新書)

マンガでわかる微分積分 微積ってなにをしているの?どうして教科書はわかりにくいの? (サイエンス・アイ新書)

積分は「面積を求める」、微分は「曲線のある点における傾きを求める」みたいな感じでざっくり理解できれば問題ない。

偏微分(未履修)

mathtrain.jp

参考書ではなく、ネットの記事だが、参考になった。 偏微分っていうと大学数学の範囲だし仰々しいイメージがあったのでビビっていたが、ちょっと考えたらそんなに難しいことではなかった。

「xyzの三次元上の空間に何らかの曲面があり、その曲面上のある点の傾きは、xyzのいろんな方向から取ることができる。つまり、どの座標の方向からその傾きを見るかで、傾きが決まる」とざっくりと理解した。

普通の微分「一つの方向からしかその点と曲線の傾きは見れない」のに対して、「xyzのどの座標の方向からその点と曲面の傾きを見るのか」っていう要素が加わったのが偏微分だと。

偏微分パラメトリック曲線の法平面、主曲率、平均曲率、ガウス曲率らへんで使う。 本試験でも法平面、主曲率、平均曲率、ガウス曲率の問題が出たが、正解できていたようなので、偏微分もざっくりイメージを理解するだけでいい。

⑦ベクトル(未履修)

ベクトルも必要なんだろうけど何も数学の復習はやっていない。 シェーディングの理解が進むんだろうがあまり乗り気がしなかった。  

具体的な勉強の進め方

  • 問題集のベーシックの問題をとりあえず解いてみる

  • 分からないなら答えとテキストの該当箇所をざっくり見る

  • 数学の知識が必要なら上記のようにざっくり捉える

  • なんとなく理解したらベーシックの同じ単元の問題をすべて解く

  • 理解したことを書き留めておいてankiに登録して復習する

  • 大体ベーシックの問題を終えたらエキスパートの問題も上記やり方でこなしていく

直前期にやったことは

  • mindmeisterを使って知識を体系的にまとめた
  • ankiで苦手なところをひたすら復習した
  • 問題集の苦手なところに付箋を貼っておき、ひたすら復習した
  • テキストの流し読みをした

その他

ダブル受験するのであれば、知的財産権の対策はしっかりやったほうがいい。 範囲が狭い割に得点が他の問題と比べて(ダブル受験する場合)二倍になるので、コスパがいいから。

説明をすると

CGEとCGCは各40問出題されるが、そのうち知的財産権は4問出題される。

構造としてはこんな感じ。

CGE = 知財4問 + 他の単元36問

CGC= 知財4問 + 他の単元36問

その上、この知財4問は共通問題。

なので4問とも正解であれば全80問中8問正解したことになる。 逆に、4問とも不正解であれば全80問中8問不正解ということになる。

このようにダブル受験するなら、知的財産権レバレッジが他の単元に比べて二倍大きい。 覚えることも大して多くなく、ダブル受験を考えるのなら優先順位が高い単元と言える。

パラメトリック形式についてまとめた

 
 
試験直前期だから知識の整理がてらざっくりCGでよく使われるパラメトリック形式についてまとめた。
 
こうしてみてみると、パラメトリック曲線にある程度の包含関係があるようで、
 
NURBS曲線⊃Bスプライン曲線⊃有理ベジェ曲線ベジェ曲線
の関係が成り立っているように思える。
ファガーソン曲線(とそれを拡張させた双三次クーンズ曲線)だけ独立している。
 
(A⊃Bは「AはBを含んでいる」という意味) 
 
最近諸々大変なことがあったので、体調が芳しくないが、明々後日の07/08(日)にCGの資格試験があるので、体調と相談しつつやれることをやってきます。
 
 

カメラの基本知識をまとめた

Mindmeisterが最高過ぎるので勉強したことをまとめた。

見づらいかもしれないので、次からはイラストも自作して足していきたい。

 

カラーモデルについてまとめた(WIP)

 

色について勉強をしたのでまとめた。

テクニカルアーティストスタートキット -映像制作に役立つCG理論と物理・数学の基礎- [演習データ付属]

テクニカルアーティストスタートキット -映像制作に役立つCG理論と物理・数学の基礎- [演習データ付属]

コンピュータグラフィックス [改訂新版]

コンピュータグラフィックス [改訂新版]

『テクニカルアーティストスタートキット』 p93-98

『コンピュータグラフィックス』 p245-250

より

 

カラーモデル

光は電磁波

光は電磁波で、色は電磁波の中の可視光線と呼ばれる波長のことを指す。その波長の違いが色として認識される。

 

色を表現する時には二つの決め方(基準)がある。

それが色空間表色系

まず色空間から。

色空間とは

色空間は三種類または四種類の数値を用いて色を表現する方法。

 色空間にはRGBカラーモデル(=加法混色、光の三原色)とCMYKカラーモデル(減法混色、色の三原色)がある。CMYKはCyan:藍 / Magenta:紅 / Yellow: 黄色 / Key plate: 黒。

前者はディスプレイやデジカメの撮像素子などデジタル機器に使われ、対し、後者はプリンタのインクやセロファンや水彩画などアナログなものを表す時に使われる。

ただ、色空間にも問題がある。

例えばRGBカラーであれば、8bitで量子化するのであればRGBの値を0-255で指定する(8bit * 3色 = 24bit)。 色は波長によって決定され、また、ディスプレイによって指定されるRGBの色の値が違う。なので使うディスプレイによっては色合いが違ってしまう。

だからそのために表色系という色の決め方が出てくる。

表色系の説明に移る。

表色系とは

 

(ここは整理できていないところなので間違っている可能性が高い)

  表色系

CIE表色系 = 加法混色 = 足したら白色になる

マンセル表色系

色相(hue)…色の違い 

彩度(chroma / saturation)…色の鮮やかさ。無彩色~鮮やか

明度(value / intensity)…色相の明るさ。黒(0)から白(10)

 

 

Red Yellow Green Blue Purpleの五色(基本色相)とその間の五色を足して計10色を円状に並べる

RGBの値を定義して、これらを三刺激値と呼ぶ

 RGB表色系は色をマイナスにするときもある

だからCIE  XYZ表色系が出てきた。虚色のことを指し、Yは色の明るさ、輝度を指す

XYZは三次元を扱う

CIE Yxy表色系 Yは輝度だからとりあえず切り離す

そうするとxyだけになるから楽になる

色度図

Pythonを使って二次元座標で任意の点を回転させた

前提

CG-ARTS協会(2015)『コンピュータグラフィックス』の2-1 二次元座標変換の回転 p23がよくわからず、理解の足しになると思いPythonで書いてみた(がいまだによくわかっていない)

コンピュータグラフィックス [改訂新版]

コンピュータグラフィックス [改訂新版]

以下の数式は、二次元直交座標系の点(x,y)を、原点(0,0)を軸として反時計回りに角度θ分回転する式。回転後の座標は点(x',y')になる。

x' = xcosθ - ysinθ

y' = xsinθ + ycosθ

CGソフトでオブジェクトを回転(rotation)するときはこの式が使われる。

今思えば、「なぜこの式になるのか」が問題だったので、コードを書くよりこの式の証明やっておけばよかったと思った...。 ちなみにnumpyとmatplotlibを使うのはほぼ初めて。

出力

横軸をx、縦軸をyとする二次元直交座標系に点(2,0) (2,2)(4,0)(4,2)を取り、原点(0,0)を軸として、これらの点すべてを反時計回りにθ = 45°分回転させた。

変換前の点を青で、変換後の点を赤でプロットしている。

f:id:lipton_lemontea:20180506162357p:plain

コード

所感

プログラミング書く前にやることを前倒しで徹底的に紙に書いたら大分捗った。 次からはこうしよう。