TIM Labs

2017年8月アーカイブ

10月7日正午から8日の深夜まで、1日半かけて数学の祭典 MATH POWER が六本木のイベント会場ニコファーレで開催される。
今回、このイベントで延々と解く問題を提供することになった。

去年は円周率を1日半かけて手計算で延々と計算してどこまで解けるかをやったのであるが、19桁目で間違えてしまった。
ラマヌジャンの円周率の公式はいくつかあるのだが、以下を使ったようだ。

PI_Ramanujan.png左辺を見ると、都合が悪いことに、円周率が分母に存在するので、Σを計算した後で逆数計算が必要になるので、一般的な円周率の公式よりも手計算はやり難いかもしれない。
そういうこともあってか、19桁目で間違ってしまったらしい。

昨年のMATH POWERについては、35時間連続の数学イベントMATH POWER 2016 報告レポートが詳しくかつ雰囲気が伝わると思うので、参照して欲しい。

mathpower2017.png MATH POWERのページも2017年版が用意され、イベントに関する情報が徐々に追加されている状態だ。

公式なニコニコ生放送として、ぶっ通し(昨年は34時間25分)でイベントの状況は流され、視聴者からのコメントが流れ、さらに会場からコメントにも対応(反応)することになる。ネットを利用した数学の双方向イベントなのだ。

     


さて、今回は、複数人で30時間たっぷりかかるような巨大なパズルを提供したいということで相談を受けて、つい引き受けてしまった。
巨大な問題に対応するためには、今まで使っていたパズル問題作成システムそのままでは無理なので、いろいろ手を入れた。でも、プログラムの修正は難しくなく、ただの作業だ。でも、ちょっとした確認でも非常に時間がかかるようになる。

巨大さと、難易度、面倒臭さ、さらには驚き、仕掛け、早合点などもあり、これらをどう問題に反映させるかが悩ましい。
要するに、どれだけ楽しんでもられるか、苦しみながら喜んでもらえるか、それに尽きる。


プログラミングに数学はどのくらい必要か と言うのをちょっと前に書いた。
今回は、その物理版を書こうと思う。

 しかし、物理と数学ではプログラミングとの関係はあまりにも違う。
プログラミングで数学能力はとても重要で、数学的能力の方が大切になることさえある。

それに比較すると、物理は知らなくても、ほとんどの場合は困らない。
 最近は物理エンジンというものも普及していて、物体の運動などは適当に計算してくれるので、計算結果の利用のしかたを知っているだけで困らないことが多い。

・・・なんてことを書くと、物理など勉強しないでも大丈夫ということになるし、実際に物理など高校までで終っているというプログラマも多いだろう。
 となると、書くことがなくなるのだが、実際にコンピュータを使って物体を動かす、制御するなどの場合は、物理の原則を知らないダメである。

物理をうまく利用すれば、ちいさなモータでちゃんと動かせたりするし、走行ルートを上手に取ったりできるわけである。
ロボットなどの制御には知っていた方が良い。
さらに、コンピュータでシミュレーションをやるときにはとても物理は重要になる。

実際に物、装置を作る前に、コンピュータ上で入念にシミュレーションをしてから設計制作に入ることも多い。
こういうときには、物理も数式レベルまで分かっていないといけない。 何をやるかによって違うが、力学、電磁気学と数学、それも行列、微積分、フーリエ解析などを必要とすることが多い。
たとえ大学レベルでも、物理をきっちり勉強しようとすると、かなり大変になる。
 でも、とりあえず、理工系の2年までに習う物理の基礎部分くらいはプログラマなら習得していても損はない。
ということで、自習用としてお手ごろな本を紹介しよう。

DSCN0694 (600x450).jpg
mathema-physics-chart.jpg数学のときと同じ、マセマのキャンパス・ゼミである。
全6巻であり、各巻の関係は右図のようになっている。

実は、それぞれの分野で必要になる数学があり、数学的に詳しいことはマセマの数学の本を見るようにとの指示で説明が終っていることも多い。

もちろん、マセマなので、説明、計算はかなり丁寧に書かれており、計算しながら読んでいけば、ほぼ理解できるのではないかと思う。
このあたりは、数学シリーズとまったく同じ感覚だと思えばよいだろう。

ただし、もちろん基礎を丁寧に書いてはいるが、そんなに分厚くなく、範囲はかなり限定されている。量子力学が、たった1冊で終っているのだが、1次元の簡単な場合の説明に限っているからである。

このマセマの物理に限ったことではないのだが、最近の物理学のテキストは、実験のこと、実際の物質、物体を具体的に示したり、写真を使ったりしての説明がものすごく減っている気がする。
個人的には「これで物理の本?」と思うのが多い。

物理を理解するというより、なんだか試験対策みたいな気がするのだ。
マセマのシリーズには、常に「単位なんて楽に取れる!」と書いているのだから、まあ偽りはない。

WEBで動くアプリなどを作っている限りは、物理学は不要かも知れない。
数学と物理がプログラミングでいっぱい必要になるのは、物理シミュレーションであろう。
そういう世界では、まだまだFORTRANは現役で、スパコンで普通に使われている。
流体、天体、気象、、、、など色々あるのだが、そこまでやる人は少ないか。

今年の春、FORTRANで書かれた電磁波工学のシミュレーションプログラムに手を入れた。
それは、狭い領域のシミュレーションだったのだが、もう1本、広域でのシミュレーションが残っている。
必要な主な知識は、電磁気学(電磁波)、フーリエ解析、FORTRAN、3次元立体幾何学程度なのだが、誰か代わりにやってくれる人はいないものだろうか。

ちょっと前、調布の電通大キャンパス内のセブンイレブンで、電子パーツなどを24時間販売していることを書いた。

ネットでは、この程度で話題になっているが、その先があるのだ。
セブンイレブンは甲州街道に沿ったビルの1階にある。

ビルの名称はUECアライアンスセンター。
入り口には管理人室があるのだが、その前を通りぬけて2階に上がってみると、marutsuの看板が廊下に出ているのだ。

DSCN0474 (600x450).jpg DSCN0382 (600x450).jpg 

中に入ると、部品が入っている小さな箱がずらっと並んでいて、まるで秋葉原の部品屋なのだ。
それもそのはず、秋葉原に本店がある、電子部品屋の マルツの西東京営業所が、大学(UECとは電通大のこと)の中にあったのだ。
さすがは電子工学というか、無線工学で有名な大学ならではである。

DSCN0383 (600x450).jpg DSCN0689 (600x450).jpg
電子部品だけでなく、入門者向けのキットなども置いてあるのだ。
もちろん、ビニール袋に必要な部品を入れたお安いキットも色々置いてあった。

多種多様は電子部品はもちろんだが、ケーブル、工具、ケース、測定器なども置いてあった。
つい手を出してしまうとはまってしまいそうだ。


DSCN0686 (600x450).jpg DSCN0685 (600x450).jpg

入り口の近くには、最近はやっているチビ・コンピュータの類が色々置いてあった。
Raspberry Pi, IchigoJam, Arduino とか色々あると思ってみていたら、ちょっと違った。
Arduino ではなく Marduino であった。

DSCN0687 (450x600).jpg  

ここに売っているものだけではなく、頼めば色々なものも作ってくれるとのこと。
うーーーむ、つい電子工作に走ってしまいそうだ。
Ubuntuを使ったり、Windowsを使ったり、あるいは同時に使いたくなることがある。
それも離れた場所にある異なるOSのマシンを使いたくなる、あるいは操作しなければいけないことがある。

Windowsの場合、リモートデスクトップがあり、使う人は使っていると思う。
これを使えば、オフィスのマシンを外出先や家から操作することができるし、その逆もできる。

ということで、こんなことをしてみた。

remina-view.png
全体の背景、左のアイコンはUbuntuである。その中に、リモートのWindowsマシンの画面を1つのウィンドウの中に表示して、その中でWindows上で動く K-Shogi という将棋ソフトを動かしてみた。

まあ、たったこれだけであるが、マウスやキーボードによる入力も不自由なくできるので、遊びでも仕事でも何でもできる。

Windows上でのリモートデスクトップについては、いまさら紹介するまでもないと思うのと、書くのが面倒なので省略する。

同様のことができるのが、Ubuntuにもある。
実際、こういうリモートデスクトップ用のソフトはいくつも存在するようであるが、ここではUbuntuに初めから入っているデフォルトのリモートデスクトップである Remmina を使ってみた。
Remmina という名称を知っている必要さえない。
プログラム検索をするときに、「リモート」と入力すると、

remina-remote.pngたったこれだけで、Remminaが呼び出せるので、あとは指示にしたがって、つなぐ相手のマシンのIPアドレスを教えれば繋いでくれる。

調布のオフィスのUbuntuから、新宿の方にあるWindowsマシンを動かしている。
さすがに画像転送がやたらに多い場合はカクカクするが、通常の操作なら全然問題ない。

Remminaについて詳しく知りたければ、 本家のホームページ https://www.remmina.org/ へ行くのが良いが、実はそこはほとんど見ていない。
実際簡単だし、日本語での説明も色々ネット上にあるようなので、存在することだけをお知らせして終えることにする。


キーボードは、プログラマなら、相当の使い込んでいるはずだ。
そして、手に十分なじんだものでないと、使うのが嫌になるはずだ。
また、巷にあふれている日本独特のJIS規格に従ったのを使いたくない人も多いだろう。
世界的には、やはりASCII配列が普通であり、JISキーボードは結局ガラパゴスキーボードなのだ。

キーボードの値段は、下は数百円から上は数万円まで、かなり幅がある。
キーボードの値段をケチって指を壊したほうが治療費がかかる上に、とても不便になりかねない。
キーボードはプログラマにとっては身体の一部のようなものなので、しっかり手入れをしよう。

私は、諸般の事情、大人の事情などから、JISキーボードとASCIIキーボードの両方を使っている。
そして、JISキーボードに関しては、あまりプログラムを作ったり、延々と記事を書くときなどには使わないので、購入したときについてきたもの、あるいは余っているキーボードを使うことが多い。
なので、何年も使い続けることは珍しいのだが、そもそもそういうキーボードのキートップの文字はシールが張ってあるだけだったりして、まともに使い続けるとシールが剥がれたり、色々問題が起こってくる。

Linux(Ubuntu)で使うキーボードは、通常ASCIIキーボードを使っている。
また、数字キーをそんなに押すこともないので、メインのキー以外の右のほうにある余分なキーがあるよりも、右側を切り捨てたコンパクトバージョンの方が良い。
キーボードがコンパクトになれば、その分机を広く使える、つまり机の上にいっぱい物が置ける。

そういうことで、ASCIIキーボードは延々と使っていることが多いが、諸般の事情で取り外して本棚の隅に保管していたキーボードを取り出したのだが、きちんと掃除しないまましまっていたら、汚れが酷く、少々こすったくらいでは落ちなくなっていた。

それで、キートップを外して、誰もが行うように、洗濯することにした。
これが洗濯前のキートップで、すでに外したものを並べてみた。
キートップの側面にかなり汚れたこびりついているのが分かるだろう。

DSCN0634 (600x449).jpg
プログラミングするのに数学の知識はあるに越したことはない。
でも、どのくらいあったら良いかの判断は難しい。
プログラミング言語の知識や、用意されているツール・ライブラリ等を使って、まあ少し勉強すれば出来ることをやるだけだったら、高等学校の数学すら不要と思う。
しかし、それでは、理屈は理解しないままプログラムをしているプログラマ程度で終ってしまう。
特に、AIに関するプログラムを書こうと思ってディープラーニングの本を開いたとたん、訳のわからないことだらけになる筈だ。

まず、理工系大学や高専で普通に教わる数学の共通部分程度の話にはついていけないと、非常に困る。
ということで、大学生向けに数学全般を扱ったシリーズ本を紹介しよう。
この分野、昔からピンからキリまで色々出ているのだが、あまりにも本格的になると大変だ。
数学専攻ならともかく、そうでない数学を道具として使いたい立場だと、やや軽めで、広く浅く、でもきちんとマスターすべきだ。

それで、今回は、このマセマシリーズを紹介しよう。

   DSCN0609 (467x600).jpg     DSCN0604 (500x600).jpg

理工系大学の生協書籍部や大手書店の数学コーナーに行くと平積みされていることが多い本である。
帯には、東大・京大・東工大・早大・慶応大・・・ 大学生が一番読んでいる「キャンパスゼミ」シリーズです とある。

説明の仕方は、従来の大学の教科書とは大幅に違い、高校数学の受験参考書といった感じだ。
とにかく丁寧に書いていることは間違いない。
このシリーズで読むのが困難と言われたら困るのだが、文系の人でも大丈夫なように「大学基礎数学」があり、さらに高校数学レベルのシリーズもあるので、そのあたりからやれば誰でも大丈夫かな。

もちろん、いくつかの問題がある。
mathema-map.jpg
これは、あくまで入門参考書なので、レベルの高い部分はバサバサと切り捨てられている。
初めからもっと高度な本を読んでもよいし、これで基礎を固めてから、本来読むべき本格的な本に行っても良い。
他のシリーズでもだいたい同様なのだが、マセマでは右図のような順番で勉強することを推奨しているようだ。
この「偏微分方程式」まで分かれば、ディープラーニングの原理もすっと分かるのではないかと思う。
AIをやるのだったら、確率・統計関係はもっとしっかり勉強しないとダメだろう。

もう1つ大きな問題は、本シリーズは大学理系共通で従来教えていた数学の範囲になっていて、情報系で必要とされている数学分野の多くが抜けていることだ。
思いついたままいい加減に並べてみると、整数論、離散数学、グラフ理論、代数学、数理論理学、、、、など色々あるし、さらに目指す分野によって違ってくる。
大学の情報系のシラバスを見ていると、これらはアルゴリズムの中に含まれていることが多いというか、アルゴリズムの中にあまりにも色々な分野が突っ込まれている感じがする。
この分野は、対象者が理工学全般に比べるとずっと少ないためか、シリーズというようなものはあまりないようだ。(あるのかな?)

ただの使い捨てプログラマなら数学は不要かも知れないが、エンジニアになるには数学は必須、知ってて当然だし、そうでないと深い理解が出来ず、効率的なプログラムなど書けない。

大学教養程度(1、2年)の数学は、参考書も多数あるし、ネットに転がっている無料コンテンツで勉強することも容易だ。
さらに、大学、先生によっては、講義ビデオが全部公開されていることも多いので、大いに利用しよう。

いや、それだけでなく、意欲ある高校生が高校の数学に嫌気がさして、大学の数学をかじってみるのもよい。

日本では、JISキーボードというとてもガラパゴスなキーボードが一般的だが、世界標準であるASCIIキーボードとはキー配列が異なる。
さすがにAからZまでは同じなのだが、記号が色々異なっている。
プログラミングしたり、システムをいじっていると、どうしても記号を入力することが多いのだが、場所が違うと非常に困るのだ。

ということで以前は、ASCII配列でかつコンパクトな、少なくとも周囲ではよく使われている Happy Hacking Keyboard(HHKB) を使っていた。
しかし、次第にコンピュータを買うとついてくる無駄に幅の広いJISキーボードが席巻するようになり、やむなくJISを使うように飼いならされてしまった。
エンジニアとして敗北である。
そして、HHKBは、本箱の隅の方に追いやられていた。

今回、オフィスも変わったということで、少なくとも Ubuntu/Linux ではHHKBを使うことにしたのだ。
HHKBでも、これは安いタイプだ。

HHK-1.jpg
今まで、JISキーボードをつなげてUbuntuも動かしていたのだがHHKBを使うにはちょっと変更が必要になる。

ということで、ネットで探すと Ubuntu 16.04で英語キーボードを使えるようにする方法 を発見。 さっそく試してみた。

sudo dpkg-reconfigure keyboard-configuration

とても簡単に設定できたので、安心して動作確認したら、記号がJIS配列のままだった。
なにか間違いを犯したらしいのだが、何も特別な設定をする個所などなかった。

ということで、この意味不明な現象をネットで探したら、UbuntuでHHKB を使う が見つかり、HHKBを指定したにもかかわらずJIS配列のままになるという珍現象の説明があり、ちょっと安心。
解決方法の説明があったのだが、設定ファイルの中身を直接いじっていて、ちょっとやり過ぎ。
もっと普通の方法を探すことにした。

そして、UbuntuのmozcでUSキーボード入力/JISキーボード入力を簡単に切り替える方法 を発見した。

sudo apt-get install fcitx fcitx-mozc

これで、fcitxがインストールできたら、「fcitx設定」を動かして、細かい設定をするだけである。 設定ファイルの中身を直接いじるなどの反則行為をしなくても、普通にASCII配列が使えるようになる。

いろいろ
想定外の部分で勉強になった。

このアーカイブについて

このページには、2017年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2017年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。