2016-04-09に 第56回オープンCAE勉強会@関東(流体など)+平林純様特別講演に参加して,「OpenFOAM標準ソルバー人気ランキング」という題で発表した。参加・発表の感想を記す。

少し長いので以下に目次を記しておく。

  1. 参加・発表の背景
  2. 発表資料
  3. 参加・発表の感想
  4. 発表後の指摘
  5. スライド作成
    1. 作成フロー
    2. HTML作成
    3. PDF生成
    4. 残る問題点
    5. 公開先
  6. 動画作成
    1. 動画を作成・公開した意図
    2. 動画作成方法
  7. まとめ

参加・発表の背景

発表時に口頭でも説明したが,今回の発表の主な目的は以下3点だ。

  1. 転職して東京に引っ越してきた挨拶。
  2. OpenFOAMの標準ソルバーの利用状況について自分が調べたことを発表するという自己満足。
  3. Reveal.jsを使った僕の初めてのCSS組版の技術的挑戦。

以下で各目的について簡単に説明する。

1点目。大阪の会社に勤務していたのだが,2016-03-31で会社を退職して,東京の会社に転職することにした。この先当分東京にいるので,ひとまず引っ越しの挨拶をしておいたほうがいいかなとおもった。

2点目。オープンCAE勉強会@関東には今まで2回参加していたが,CAEといえるような内容の発表はあまりしていなかった。発表内容としては,OpenCAE勉強会のメインテーマの一つと思っているOpenFOAMに関するものをそろそろやったほうがいいかなと思った。単純に今後OpenFOAMで何かやるときの参考にしたいなと思ったし,新しく始める人にとっては需要があるんじゃないかなと思った。

3点目。自分の関心の一つに「CSS組版」がある。2016-03-31にHTML5プロフェッショナルレベル1の試験に合格して,HTMLに関する知識の自信がついた。CSS組版の探求として,HTMLでスライドを作ってみたいと思っていた。HTMLでスライドを作るにあたって,いくつかライブラリがある。そのうち,比較的人気のReveal.jsがどんなものか試してみたかった。

主でないが以下の項目も今回の参加の目的だ。

  1. 会場提供者への挨拶・お礼。
  2. 2015-05頃にできたオープンCAE勉強会のロゴの使用。

1点目。今回でこの勉強会には3回目の参加だ。勉強会幹事には既に挨拶をしていたが,会場の提供者には挨拶をしていなかった。挨拶したほうがいいなと思ったので名刺を渡して挨拶した。

2点目。2回目に参加した2014-11-29に参加・発表した第44回オープンCAE勉強会@関東(流体など)で,勉強会のロゴがほしいなとツイートした。そこから話が発展して,2015-05頃にオープンCAE勉強会のロゴが作られた。この一連の経緯は以下でまとめている。

オープンCAE勉強会のロゴができるまでの経緯 – Togetterまとめ

言い出しっぺとして,使わないわけにはいかなかったし,かっこいいあのロゴを使いたかった(スライド表紙の右側に配置)。

以上が今回の勉強会の参加・発表の経緯だ。


たまたま今回の勉強会では平林純という雑学科学研究者を名乗る人の特別講演会があった。僕は知らなかったのだけど,一部で有名な人らしくこの人目当ての参加者もいたようで,最初は参加者が多かった。

参加前にこの人について調べていたのだけど,いくつか本を出しているようで,以下の本は購入して読んでいた。

論理的にプレゼンする技術 聴き手の記憶に残る話し方の極意 (サイエンス・アイ新書) | 平林 純 | 本 | Amazon.co.jp

大学院生のときにプレゼンテーションをうまくやる方法について片っ端から調べていた時に読んだ本だ。2013-11-02に手元に読了記録があり,「悪くはなかった。」とメモがあった。

この人は数値解析を使ってなんかいろいろ遊んでいるみたいだった。数値解析を日常で役に立てられないことを自分の中で大きな問題と思っていたので参考にできたらいいなと少し興味をもった。

発表資料

今回のスライドはReveal.jsで作ったのでHTML版とPDF版の2種類の媒体が存在する。発表にはHTML版を使った。こちらのほうがレイアウトが僕の意図通りなのでこちらで見たほうがよいだろう

発表資料
項目 内容
演題 OpenFOAM標準ソルバー人気ランキング
スライド (HTML) https://senooken.jp/public/20160409/slide.html/
スライド (PDF) https://senooken.jp/public/20160409/slide.pdf/
動画 https://www.youtube.com/watch?v=LnpITC9lzm0

また,今回は発表時の音声と画面を自分で動画にしてYoutubeで公開することにした。オープンCAE勉強会では発表者の許可を得て,Vimeoで発表動画を公開している。僕の発表もこちらで公開されている。他の発表動画など自分のことは自分で一元管理したいなと思って自分で動画にしてみた。

参加・発表の感想

今回は参加者が多く,初参加の人が8人だった。その人たちの自己紹介とそれに対する質疑がそれぞれ20分くらいだった。自分の発表は17:00頃で待ち時間が長くて退屈だった。この勉強会自体の経緯や説明があったのは参考になった。ゲストに質問してみたが,自分が納得いくような回答は得られなかった。CAEが楽しいという人がいて珍しく思った。

勉強会の最後に,なんかCAEと全く無関係な内容の発表している人がいた。小学校の数学の教科書に江戸しぐさという言葉が間違った意味で伝えられてしまっているので,この問題への啓蒙とかそんな内容だったと思う。インターネットがつながらないとかを理由に,きちんと資料も掲示せずに,何が言いたいのか・なぜここで発表するのかの説明がなくて,何考えているのかよくわからなかった。発表するならきちんとやってほしいなと思った。


今回の発表スライドは4/3日から作成を開始した。テーマ自体はそんなに難しくないが,今回は初めてHTMLでスライドを作るということで,あまり余裕はなかった。Reveal.jsの使い方の学習や,ツールの作成で日曜日は終わり,平日夜間にスライドの大部分を作らざるを得なくなった。今回の勉強会は,引っ越してきて一発目ということでタイミング的にも何がなんでも発表したかった。数値解析と無関係な職業に就くことにしたので,もう当分は参加することがないだろうと思っていたからだ。

一年ぶりの勉強会での発表で少し緊張した。発表スライドはきっちりしたものが作れた。テーマも含めて,発表自体はまあまあうまくできたんじゃないかなと自分では思っていた。最初に掲げた3+2の自分の今回の発表の目的も果たせたのでよかった。

質問されたが,Vivliostyleを知っている人がいて,びっくりした。ランキングに対して怪しいとの声があったが,示している条件で検索すると実際になっている。会場で検索してくれた人がいたが,実際にdsmcFoamの検索数を再現できていた。なので,調査結果自体は間違っていなかった。こういうのは,社会実験とか数値実験みたいなものだと考えている。きちんと条件・手順を示してトレーサビリティーを確保しておくことは大事だと思った。

今回調べた内容は実際のところはOpenFOAMv2.3系の標準ソルバーだったようだ。参照していたマニュアルが古くて,古い情報を元にしていたようだった。別に僕はOpenFOAMのユーザーでも専門家でもないし,そんな細かい情報は知りようがない。他の人がわかるように,公式文書にはきちんと明記してほしいなと思った。

今回の標準ソルバーの検索数の調査は,手作業で行った。自分でGoogle検索でコピーペーストして一個ずつ検索して,ヒット数を控えるということをやった。全部で69ソルバーあり,途中で検索条件を間違えていたのもあり,検索数の調査自体は約2時間かかった。

手作業でやること自体は効率が悪いだろうとは思っていた。しかし,今までやったことがないので自動化するにも試行錯誤が必要だ。イベントまで時間があまりない。時間以内に検索数の取得が間に合う保証はなかったし,自動化着手から2時間以内に完了できる気はしなかった。だから今回は手作業で行った。Google検索を自動化することは今回の発表の趣旨とは無関係であり,これからも継続的に調べるつもりもなかったので,自分としては別に何も問題なかった。

懇親会でこの検索方法の話をふられて,手動でやったといったらその場にいた5人くらいの人全員に驚かれた。「てっきり自動化してるもんだと思っていた」とか,「それくらい調べればすぐにスクリプト組めるでしょ?」とかいろいろ言われた。できる自信がなかったとか,時間が足りなかったとか,手動でやった理由を説明したが理解してもらえなかったようだった。

何も悪い子としていないし,誰にも迷惑をかけていないのに,本題と関係ないところで周りの全員から集中的に批判を受けて,無能扱いされたみたいで不愉快だった。

ちょっとくらいからかわれたり,馬鹿にされたり,笑いものにされたりするのは,わかっていても平気な顔していちいち気にしない。そんな人間相手にせずに,あまり気にしないようにしていた。しかし,今回は許容限界を越えたようで残念だった。

発表後の指摘

今回の発表では,手作業でOpenFOAM標準ソルバー69個をGoogle検索で検索してヒット数を集計した。

勉強会終了後に,この検索ヒット数を自動化する方法を教えてくれた。

シェルスクリプトを意味のある単位にまとめると以下となる。なお,事前にOpenFOAMの設定.bashrcを読み込んでaliasのsol(OpenFOAMのソルバーディレクトリへの移動)を使えるようにしておく必要がある。

sol
U="https://t.co/wbgv8v8uGW"
for CS in `find . -name files | xargs grep EXE | sed "s/\.\/\([^\/]*\).*\/\(.*\)\/Make\/.*/\1,\2/"`
do S=${CS#*,}
R=`curl -s -e $U -A "Mozilla/4.0 (compatible; MSIE 5.5; Windows 95)" $U/search?q=%22$S%22+%22OpenFOAM%22 | grep " results (" | nkf -u | sed "s/.*>\([^>]*\) results (.*/\1/"`;echo $CS,\"$R\";sleep $(($RANDOM % 10))
done

スライド作成

今回は初めてHTMLでスライドを作った。いくつか発見などあったのでメモしておく。

作成フロー

Reveal.jsを使った。Reveal.jsの公式サイトから一式をダウンロードしてきてそのひな形をベースにした。僕はWYSIWYGで資料 を作りたいので,エディターにBlueGriffonを使ってやろうとしていた。BlueGriffonとReveal.jsを組み合わせて使ったのは僕 が初めてなんじゃないだろうか…

  • ひな形のファイルにユーザーカスタム属性data-*が使われており,一箇所でもこの属性があればBlueGriffonではファイルを編集できないようだった。なので,手動でdata-*属性を除去した。
  • Reveal.jsを構成するCSSやJavaScriptを読み込むと画面が真っ暗なままで編集できない。なので,ひとまずCSSやJavaScriptの読み込み箇所は分離してsrc.htmlで作成した。
  • スライドは見た目が大事なので,最終表示結果を確認し微調整するがあった。merge.shというシェルスクリプトでhead要素の終端とbody要素の終端にそれぞれCSSとJavaScriptを追記して最終表示結果index.htmlを出力する簡単なツールを作った。

HTML作成

  • Reveal.jsでは.reveal > .slides > sectionの階層を持たないといけない。ひな形はdivを使っていたが,div要素は気持ち悪いから使いたくないので,body.reveal>main.slides>sectionという構成にした。
  • 普段使っているCSSをできるだけ使った。節番号を入れたり,表をボーダーカラーにしたり。
  • ただ,節番号をいれるとき,目次やタイトルには番号を入れたくなかったのでbody>main>section>hrというようにsection要素の一行目にhr要素を入れた。だから,表紙と目次には白い罫線が上に付いている。
  • 表紙の氏名にはruby要素でルビを振った。今まで使っていたLibreOffice Impressではルビが振れなかった。
  • 表の中に長い英単語を入れると折り返されないので,単語の途中でも折り返すように,以下のスタイルを適用した。
th, td {
  word-wrap: break-all;
}

PDF生成

PDFを出力するときは,以下のようにURLの末尾に?print-pdfとしたページにアクセスしてC-pの印刷から背景画像にチェックを付けてファイルに印刷する。

https://senooken.jp/public/20160409/slide.html/?print-pdf

PDFに出力すると余白など配置がずれることがある。例えば,p. 2のTable of Contentsの次のページに空のぺーじができたり,最終ページに白紙ページができたりする。公開時には手動でこれらの余分なページは削除している。ずれるのは,例えば3.2など鉛直方向にスライドが進むとき,親の節の部分のスペースを確保しないといけないからだろう。

残る問題点

  • HTMLだと節番号が3以降増えない。
  • PDFだと右下のページ番号が反映されない。
  • 配置のずれ。
  • 画像の色がHTML版と変わる。

動画作成

動画を作成・公開した意図

動画を自分でYoutubeに公開するのは以下2点の狙いがある。

  1. 自分の活動のアーカイブ。
  2. お小遣い稼ぎ。

1点目。勉強会で発表するというのは自分にとってはかなりの労力となる。自分の発表欲をみたすためだけにやるのはジリ貧で辛いなと思っていた。どれ もそのときの全力で作っている。その場の人だけのものにするのはもったいないなと思っていた。動画として公開しておけば,他の人にもこの先もずっと見ても らえるし,自分の活動の振り返りとしても面白いかなと思っていた。

2点目。ここ何年かでYoutuberと呼ばれる人が登場してきた。Youtubeに動画を公開して広告収入を得ている人たちのことだ。Youtubeはけっこうお金が儲かるという噂をきいていた。自由で生きていくにはやはり自分でお金を稼ぐ必要がある。自分で楽しめて,お金が稼げるならそれはよいだろう。まだ,広告収入を得る設定はしていないが,今後そういう狙いもある。よくわからないが,自分の中で広告とかでお金を稼ぐことには抵抗がある。しかし,自分の声を公開するのは少し恥ずかしいのもあるので,その対価ということで納得させている。

また,どうせ既にオープンCAE勉強会の発表動画は公開されているので,別に隠しても意味がないと判断した。声は目には見えないので,特定される形で顔写真がネット上で拡散することに比べたら,そんなに恥ずかしくはないかなと思う。

動画作成方法

今回は初めて自分で発表動画を作ったので,手順をメモしておく。

  1. 以前から,質疑の確認や記録として発表時には音声レコーダーで自分の発表を録音していた。
  2. 画面キャプチャーソフトを使って,発表音声を聞きながら,画面を切り替えて無音声動画を録画。
  3. 音声と無音声動画を結合させて動画を作成。
具体的には以下のソフトを使った。
  • 画面キャプチャー:kazam
  • 音声と動画の結合:avconv

初めは画面キャプチャーにメディアプレーヤーのVLCを使おうとしたが,マウスポインターがうまく映らないので断念した。また,音声と動画の結合にはOpen Shotを使ってみたが,エンコード後の動画サイズが220 MBと元の動画(50 MB)と音声(8 MB)の4倍近く肥大化したのでavconvを使った。

avconvはffmpegからForkしたものでUbuntuではffmpegではなくavconvをインストールできる。基本的には同じもののようだ。以下のコマンドで動画と音声を結合させた。

avconv -i 動画.mp4 -i record.mp3 結合後動画.mp4

驚くことに,avconvで結合させたらファイルサイズが20 MB程度と元動画より小さくなっていた。

まとめ

今回の勉強会での発表では以下の新しいことに挑戦できた。

  • CSS組版によるスライド作成・公開。
  • 発表動画の作成・公開。

一部残念なことはあったが,次につなげていきたい。