2022年4月30日土曜日

4月下旬の話題まとめ

4月21日

昨日は研究室に大型モニターが届いた記念日.

プロ野球

プロ野球でまたナイスゲームがあったようです.バースデータイムリーだとか,ランニングホームランだとか.先日の佐々木選手のような好投も面白いですが,やはり乱打戦で点がパカパカ入るようなゲームも面白いですね.

星野源のANN

ラジオ番組のオールナイトニッポン,ときどき話題になりますよね.昨日は星野源のオールナイトニッポンでした.この番組とか乃木坂のそれとか,Twitterで話題になる番組とそうでない番組の差はなんでしょう?

今日は何の日

〇〇の日,というトレンドが話題クラスターを作りました.珍しいですね.郵政記念日,青年海外協力隊の日,あたりはまあ,ふーん,ですが,女子大の日,腰痛ゼロの日,四川料理の日,ジャムの日って,いったいなんでしょう??

4月22日

雨が降ったり晴れたり天気がくるくると変わりますね.

中本悠太

モデルのNCT 127・ユウタ(中本悠太)が映画「HiGH&LOW THE WORST X」で俳優デビューという話題です.この人「日本人男性でインスタフォロワー数1位」なんだそうです.知らなんだわー(興味ない)

乃木坂ANN0

東北サミット,スノーダンプなどのトレンドは,乃木坂46のオールナイトニッポン0の話題でした.昨日の星野源に引き続き,乃木坂46のオールナイトニッポンも,Twitterでときどき話題になるくらいには人気ですね.

柳生博

最後は訃報です.俳優の柳生博さんがお亡くなりになりました.享年85歳,山梨県北杜市のご自宅でなくなられたとのこと.ご冥福をお祈り申し上げます.

私ごとですが今週末はいろいろ忙しいのです.

ゴミファイル名メーカー

shindanmakerです.蜜結合なのですぐにわかります.ゴミファイル名を作るゲームのようです.試しにやってみたらこんなん出ました.「【PDF版】Readme(1)_仮案_決算_まとめ_未記入項目アリ_記入待ち_絶対変えるな!_(現在田中さん編集中につき変更禁止).avi」

阪神3タテ

今年の阪神はいったいどうしちゃったんでしょう.DeNA相手に3連敗.雨天コールドで負けました.打てんコールド?点数はそれなりに入っていたようですが,負けました.

めざましテレビ

朝のワイドショーが話題クラスタを作るのは珍しいかもしれません.なにわ男子がめざましテレビに出てちょっとした話題になっていました.

4月24日

もう初夏の陽気ですね.春はどこにいった?

ZETA

ここのところずっと燻っていたZETAの話題が爆発した感じ.なんか強い相手と戦って勝利したとかそんな状況ですか?それ以上のコメントができません(よく知らない).

競馬

週末なので競馬の話題クラスタができていますが,東京,福島,小さく阪神,というようにクラスタが分かれています.東京はオアシスステークス,福島は福島牝馬ステークスがメインレースでしたか?

好きな短刀

〇〇藤四郎という密結合のクラスタがあります.診断系?かと思いきや,「好きな短刀5振り挙げると審神者の趣味がわかるらしい」というハッシュタグを付けて短刀の名前を挙げるという遊びのようです.刀剣乱舞ですね.その詳細は,すみませんわからない.

4月25日

気づけばもう4月も最終週ですよ?

ZETA

世界第3位というところでフェスティバルは終わったようです.ところでTwitter以外でこの話題を全く聞かないんだけれど,そんなもんなんですかね?ていうか,ZETAが何なのか,何のイベントなのか,最後までよくわかりませんでした.

競馬

週末です.大きな競馬のクラスタができています.阪神のメインレースはマイラーズカップ,東京のそれはフローラステークスというレースでした.

観光船不明

こちら,事故のニュースです.北海道の知床沖で観光船が行方不明になり,乗客が意識不明の状態で発見されたというニュース.それにしても朝から喧しい感じでしたが,なんでそんな早朝に観光船が出ていったのでしょう?そこからしてよくわからないニュースでした.

4月26日

今日のクラスタは読み解くのが難しかった……

私の幸せ

2023年春公開予定の「私の幸せな結婚」という映画で,Snow Manの目黒蓮が主演をつとめ,さらにヒロイン役は今田美桜というキャストが発表されたニュースが話題になっていました.共に25歳,フレッシュなコンビです(しかしどちらも私は知りませんでした).

新刀剣男士

刀剣乱舞の新しいキャラクターが公開されたんですか?ちょっとよくわからないんですが,「刀剣乱舞」新刀剣男士,打刀「稲葉江」のCVが武内駿輔!というニュースが話題になってました.CVっていうのは,声の担当,キャラクターヴォイス,ですよね.

F1

これだけ,見てすぐわかりました.F1のレースがあるとたまにできるF1の話題クラスタです.レッドブルだのハミルトンだのフェルスタッペンだののキーワードですぐにわかりますが,これも知ってないとわからないか.

4月27日

なんだかパッとしない天気が続きますね.

ツイッター買収

イーロンマスクがツイッターの株を買い占めたんだそうで,ツイッター界隈がだいぶざわついています.大きな話題クラスタになりました.ツイッター有料化という話題で,「有料化されるなら,もうしない!」と早とちりさんたちが湧いていますが,有料のオプションを追加する,というだけの話で,今までどおり,普通に使えます.まあ,そういう人たちが声を荒げているのよね……(ノイジーマイノリティだとは思いますが,「ナントカ丸出し」で恥ずかしい)

ロシア

恥ずかしいといえばロシアの偉いひとたちも,国際的に恥ずかしい発言を繰り返しています.もう,ウォッカの飲み過ぎで脳細胞が死滅してるんちゃうん?というレベル.とち狂って世界を巻き添えに破壊行動に出ないようにしていただきたいものです.

デーブ大久保

恥ずかしいついでに,デーブ大久保氏の発言も叩かれています.プロ野球の試合で審判と選手が一悶着あった件について,古臭い昭和の基準で発言して,批判の嵐.もって他山の石としたいものです.

4月28日

昨日のトピックマップは落ち着いた感じでした.

遊覧船事故

知床の遊覧船事故で運営会社の社長が会見をした件が話題になっていました.現在のところ11人死亡で残りの15人も行方不明.まあ,もう難しいでしょうなあ.条件付き運行になっていたと社長は説明したようですが,事務員はなってなかったと証言,はて,これどういうこと?

マリン出港3DLIVE

遊覧船とは全く関係ない話題ですがたまたま「出港」という文字が入っています.ていうかマリン船長ってなに?ゲームですか?アニメ?よくわかりませんが,その手のカルチャーです.

橿原市長

一転して政治の話題です.橿原市,先日,訪れたばかりなので,親近感があります.でもって,維新の議員が議会で怒鳴り散らしたとか.まあ,ええ大人が公の場で激昂するのはあきまへんな.体は大人!心は子供!江戸川コナン!の逆!ですなあ.

4月29日

今日からゴールデンウィークですね.

金カム最終回

こちらはゴールデンウィークならぬ,ゴールデンカムイです.一部に根強いファンを持つ,ゴールデンカムイ(通称「金カム」)という漫画が最終回を迎えたとのこと.そして終わり方が見事だったと高評価のようです.

なにわ男子

ジャニーズ強し!なにわ男子が朝のワイドショー番組「スッキリ!」に登場してどうこうという話題です.なんだかんだいって,皆さん,TV好きなんだよなー

Liella

そしてこちらがよくわからないのですが,Liella というグループに新メンバーが加入したという話題です.「ラブライブ!スーパースター!!」Liella!,新メンバー4人が2期生として加入,だそうです.これってゲームですか?アニメ?

4月30日

今日は全国的にいい天気になりそうですね.

GWスタート

大型連休は雨のスタートでした.「地獄のGW」というトレンドが気になったので覗いてみたら,接客業はたいへーん,という記事がバズっていたようです.まあ,皆さんいろいろですな.私も,おそらくずっと仕事です.

魔女の宅急便

金曜ロードショー,ジブリがかかるといつも話題になりますね.昨夜は「魔女の宅急便」が放送されました.魔女の宅急便,原作はキキがお母さんになって世代交代するところまであって,とても面白いので一読をオススメします.

阪神4連勝

阪神どうした?脅威の低空飛行からの,4連勝だそうです.これで阪神ファンも少しは安心できたでしょうか.でもまだ最下位なんですよね?おきばりやす.

2022年4月29日金曜日

オンライン・プログラミング演習がいよいよスタート

かねてよりここで報告してきたように,オンラインでプログラミングの学習を行う演習(ゼミ)が軌道にのってきた.準備そのものをオンラインでやるのはなかなか難しかろうと,初回と二回目は教室に集まってもらったが,(いろいろと事情があり)第三回目は教室に集まったのは3名だけで,残りのメンバーはオンラインで参加するという状況になった.

この図は,オンラインで講義資料を配信しつつ,各学生による実習の様子をモニタリングしているところである.左側が配信している資料の画面,右側が学生の作業をモニタリングしている画面である.

学生と共有している画面のアップデートがあるとフォーカスが移動するような設定になっているのか,ときおり,不自然な動作が起こるとか,あるいは,コンテンツの共有がうまくできている学生とそうではない学生がいるとか,不可解な動作を示すところも残っているが,全般的には,想定したとおりのイメージで演習を進めることができた.

このMultiViewとGoogle Colaboratoryを併用したプログラミング指導は,オンラインだけでなく,教室に集まって授業をするときでもそこそこ有効に使えそうだということもわかった.このアイデア,Google Colaboratory以外にも,文書作成画面をGoogle Docsなどで共有するとか,いろいろな場面で使えるかもしれない.まさに発想次第といったところか.

しかし,教室に来た学生の次の一言も印象的だった.やはり,オンラインでは情報量が圧倒的に制限される.教室の良さ,F2Fコミュニケーションの意味を,彼女は噛み締めていたのかも.

「わたし,教室に来なきゃ,たぶん置いてかれるわ……」

2022年4月20日水曜日

4月中旬の話題まとめ

4月11日

昨日は日曜日なのに競馬の大きなクラスタはありませんでした.

佐々木朗希

競馬のごっついクラスタがなかった代わりに,プロ野球の大きなクラスタができていました.千葉ロッテマリーンズの佐々木朗希選手が完全試合をやってのけたという話題です.高卒入団のまだ若干20歳,28年前,巨人の槙原以来の大記録だとか.佐々木希とは別人です.

ニチアサ

一方,ニチアサの話題は健在です.モモタロウがどうとかいうのは仮面ライダー,なんたらレンジャーというのは戦隊モノですか.キュアスパイシーというのはプリキュアですね.大きなお友達とTwitterは相性がよいようです.

桜花賞

競馬の話題が全くなかったわけではなく,昨日は桜花賞がありました.由緒正しいGIレースですね.スターズオンアースという馬が勝ったようです.

4月12日

昨日はわりと小粒な話題ばかりでした.

さよなら絵梨

「チェンソーマン」「ルックバック」で人気の藤本タツキの新作読切マンガ「さよなら絵梨」が,ジャンプ+で公開されたというニュースです.一気に200ページの大作です.そして「クソ映画を見せられた」という感想を誰もが抱くという読後感に納得.なぜクソ映画なのか?読んでみてほしい.まあ,最後のオチは予想がついたという点も含めて,クソ映画を見せられた,なんだろうなあw

ZETA

えっと,これが本当にわからない.ゲームの対戦ですか?eスポーツ?とにかくなんかの世界大会があってどのチームが強いだのなんだの.ZETAっていうのはゲームの名前?チームの名前?プレイヤーですか?ちょっと調べただけでは全くわからないのです.

ハチ公

飼い主がロシア軍に殺されて1ヶ月待ち続けているキーウ版ハチ公という犬の話題です.可哀想な話ではありますが,日本人この手の話に弱いよね……

4月13日

ずいぶん暖かくなってきました.

なにわ男子

なにわ男子の話題です.ジャニーズもTwitterで頻繁に話題になりますね.なにわ男子とローソンがコラボしてどうとかこうとか.その実体はよくわかりません.

化学兵器

ロシアのウクライナ侵攻の話題です.化学兵器を使用した疑いがあるとかどうとか.プーチンの時代錯誤感が否めません.人間の尊厳を踏み躙るというか,人間が他の動物と異なるのは言葉で平和に紛争を解決できることであって,暴力に訴えるのは犬畜生と,いや,犬に失礼ですね.畜生以下ですよ.

松島みのり

訃報です.「キン肉マン」のミートくんや「怪物くん」の市川ヒロシなどの声をあてて活躍されていた声優の松島みのりさんがお亡くなりになりました.享年81歳,ご冥福をお祈り申し上げます.

4月14日

今日は天気が悪くなるそうです.

ZETA

ZETAとかFNC,FNATICとかさっぱりわからないので調べてみました.「2022 VALORANT Champions Tour」というeスポーツ?の大会があって,4月10日から24日までアイスランドのレイキャビクで開催されている国際大会に日本からZETA DIVISIONというチーム?プレイヤー?が参加するという話題ですね.

スパロボ30

こちらもゲームの話題です.「スーパーロボット大戦30」というゲームの拡張パックが発表されて,いろいろなスーパーロボットのキャラクターが含まれているという話題.皆さんお好きなロボットがいるのでしょうか,スーパーロボットの名前がトレンドに並びました.ボトムズやらシンカリオンやらは聞いたことがあります.

チー牛

ネットスラングで「チー牛」という言葉があります.「ちーうし」ではなく「ちーぎゅう」と読むそうです.「三色チーズ牛丼の特盛,温玉付きで」と牛丼屋で頼むオタクを揶揄する言葉らしいんですが.チーズ牛丼,美味しそうですよね?

4月15日

今日も一日天気が悪いようですね.

ZETA

ここのところ話題が続いているZETAです.まだその真相がよくわかっていませんが,eスポーツだかの大会に出ている日本のチーム?盛り上がっているのはテレ朝が推しているからでしょうか.TVとネットの関係は切っても切れないということがわかっています.

じゅじゅステ

そしてこちらは舞台です.舞台「呪術廻戦」のキャストが発表されて話題になったというところです.「じゅじゅステ」というのは「呪術廻戦のステージ」ということでしょうか?

インターネットのヲタク

shindanmakerです.「あなたを『インターネットのヲタクが懐古に狂う曲』で例えると」だそうです.インターネット老人音楽祭とかいうハッシュタグが付いています.しかしどれも知りません.どうも私よりもっと若い世代のようです.老人会だ?ジジイ舐めんなよ!w

4月16日

今日もまだ天気が悪いようですね.

ZETA

さてこのところずっとこの話題が盛り上がっています.やはりTwitterユーザーは世間とは若干の乖離があるような気がします.ていうか一部が極端に盛り上がっているんでしょうね.このへんのメカニズムも解明できればと考えています.なお,若干,違う話題も混じってしまっているようです.閾値を下げた弊害が現れています.

阪神&コナン

阪神がようやく2勝目を上げたようです.このクラスタも,右のほうは違う話題ですね.佐藤選手から佐藤さんに繋がって,佐藤刑事やら高木刑事やらというのはこれは名探偵コナンの話題です.ということで,この話題クラスタは「阪神」と「コナン」の合作という珍しいものとなりました.

山本太郎

れいわ新撰組の山本太郎が衆議院議員を辞職して参議院選挙に出馬とのこと.なんでそんなことするの?と疑問に思いましたがどうも衆議院議員を辞職すると同じれいわ新撰組の党から議席を埋めることができるようですね.セコいといえばセコい.ま,議員なんて皆(以下自粛)

4月17日

天気もよくなりました.

競馬(阪神&中山)

土曜日なので競馬のクラスタができています.阪神と中山です.阪神11R,メインレースはアーリントンカップ,中山11Rのメインレースは中山グランドジャンプという障害レースだったようですね.グランドジャンプはオジュウチョウサンという絶対王者が勝利しました.他に福島でもやっていたようですが,そちらはあまり話題になっていなかったようですね.

ラブライブ!

右下にある黄色いクラスタは,虹が咲なんとかとかいう話題で,ラブライブ!というキーワードが目立つのですが,よくわかりません.ごめんなさい.教えて偉いひと.

Coachella

米国の音楽フェスですね.「世界最高峰の野外フェス」と名高いCoachella,だそうです.出演者の名前でしょうか,英語のトレンドがクラスタを作っています.日本のトレンドとしては珍しいパターンです.

4月18日

今日はまた天気が悪くなるんですか?

ZETA

ZETAの話題が止まりません.世の中的には,そんなに盛り上がってる?という印象なんですが…….これは24日までずっと続くのでしょうか.面白い現象です.

佐々木朗希

佐々木選手がよもやまた完全試合?という勢いだったそうで,8回まで完全試合だったとのこと.しかし打線が貧弱で,8回の時点で0対0で,佐々木選手を降板させたということで賛否両論になっているというお話.まあ,無理のない範囲で頑張ってもらいたいもんですねー.

コーチェラ

昨日に引き続きコーチェラの話題です.そんなに洋楽好きがいたの?という突然感は否めません.宇多田ヒカルが初出演ということも話題になっていたようですね.

昨日は日曜日だったので,ニチアサと競馬の話題,大河ドラマの話題などでも話題クラスタができており,全体的に華々しいトピックマップになりました.競馬なんて,皐月賞というビッグレースだったのに,他の話題に負けてしまった感がありますね.

4月19日

今朝はきれいに晴れました.

CDTV

「CDTVライブ!ライブ!」というTBSの3時間音楽番組の話題が盛り上がっていました.一見して診断系のようにみえる密結合のクラスタができているのは,出演者の名前を皆,並べていたからでしょう.診断系と同じようなツイートが並んだということですね.

あなたを合成獣に例えると

そしてこちらは診断系です.4ndan.comです.それにしても浅はかなURLだなあこれ.それで「あなたを合成獣に例えると!!」だそうです.合成獣ってなに?キマイラとか,ケンタウロスとか,そういうものですか.

シャブ漬け戦略

そして吉野家の取締役による大暴言です.これは酷い.オッサンが居酒屋で飛ばした冗談ならまだしも,公の席で,しかもなんら問題とも思わず大真面目に語っているセンスが酷い.ときどき講義でも冗談飛ばすことはあるので,こういう発言をしないように,気をつけようっと.

4月20日

雨が降ったり腫れたり春は忙しいですね.

ZETA

ZETAの話題が止まりません.そして私にはさっぱりわかりません.とりあえず24日まではお祭りが続くようですので様子見です.がんばってー.

SixTONES

こちらはジャニーズですね.新曲が発表されたのでしょうか.ジャニーズにもあまり興味がないのでこちらもスルーです.

ゴールデンカムイ

これはちょっとだけわかります.ゴールデンカムイ,金カムなどと呼ばれて親しまれている漫画です.面白いらしいですね.私は読んでいませんが.それが実写映画になるというニュースが流れてその話題です.


2022年4月18日月曜日

オンライン演習までの(厳しい)道のり

この4月から,プログラミング系の演習をオンラインで実施するという(なかなかにチャレンジングな?)試みに挑戦している.多摩,後楽園,市ヶ谷と分かれている本学において,全学からメンバーが参加する全学対象ゼミが始まったからである.さらに,来年度には法学部が茗荷谷に移転するので,多摩,後楽園,茗荷谷,市ヶ谷と4拠点を結んだオンラインゼミナールを実施することになる.

本学ではFLP(Fuculty Linkage Program)として既に全学ゼミの実績が十分にある.本プログラムは,AI・データサイエンスセンターが実施するiDS(intermediate program on the Data Science and AI)プログラムと呼ばれるもので,新たにAIやデータサイエンスを学ぶ演習プログラムとして用意されたものだ.2年生から卒業まで,3年間みっちりとゼミ形式でAIやデータサイエンスを学ぶプログラムである.理工学部,総合政策学部,文学部,国際情報学部(iTL.私)所属の教員4名がそれぞれ各ゼミを担当する.

いよいよ初回が始まったが,さすがに最初は,市ヶ谷キャンパスの教室に集まってもらって,自己紹介から始めた.いきなりオンラインかつ全てオンラインでは友情も育まれないであろうという配慮である.さらに,オンラインで円滑に学習を進めるための準備は,さすがにオフラインでやらねばならなかろうという意図もある.

オンライン演習実施の工夫

これまで「オンライン演習実施のためのヒント」「オンライン演習どうするどうやる?」「続・オンライン演習どうするどうやる?」で紹介してきたように,オンラインで演習を実施する工夫として,OBS(Open Broadcaster Software)を使って学生のデスクトップをシェアしたり,拙作のちょっとしたソフトウェアMultiViewを用いて学生のノートブックをシェアしたりという方法を考えた.OBSとMultiViewを用いたオンライン演習環境については,参考文献(Iio, J. 2022)も参照されたい.

せっかくソフトウェアを作り込んだ(というほどでもないが)ので,MultiViewの利用を優先的に考え,初回では学生にMultiViewの存在と,プログラミングの演習はGoogle Colaboratory(以下,Colab)を使うよと伝えた.まずはHello Worldからということで,ColabでHello Worldするところまでは,うまくいった.まあ,それほど難しい話でははない.

さて,ではそのノートを共有して,というところで問題が発覚した.それは,基本的に学生のドキュメントは,学内アカウントでログインしたアカウントでしか共有できない設定になっている,ということである.用意していたMultiView環境は学外のアカウントだったので「とりあえずテストだからリンクを知っていれば誰でも共有可能にして」と指示したところ,学生から「できませーん」と声が上がったという次第である.

試行錯誤で問題解決へ

しかたがないので,私の学内アカウントでMultiViewを使うべく,用意をしようとした.MultiViewをGoogle Chromeから使うには,「Ignore X-Frame headers」という拡張機能を入れなければならないのだが,今度は「Googleウェブストアにはアクセスできません」というエラー.学内アカウントではウェブストアにアクセスできない設定になっていたのである(図).

どうやって拡張機能をインストールすんのよ?といろいろ調べたら,拡張機能のソースコードを直接参照することで,導入できることがわかった.そして,幸にして,入れなければならない拡張機能はそのソースコードをGitHubで公開していたので,git cloneして必要なソースコードをダウンロードし,ブラウザの拡張機能として次の手順で導入できた.

その手順とは,拡張機能設定を開き,「デベロッパー・モード」をオン,「パッケージ化されていない拡張機能を読み込む」ボタンを押し,マニフェストファイルとソースコードが置かれているディレクトリ(manifest.jsonが置かれている場所)を指定する,という方法である(図).

正直,いろいろと障害があるなあという感じで,苦労は絶えない.これでMultiViewが利用可能になったので,次は,実際に使ってみてその使い勝手を自ら,そして学生からも,評価していこうというところである.

参考文献

Iio, J. (2022) OBS Share and MultiView: Two Methods for Sharing Student Work in Distant Teaching, The 20th International Conference on e-Society (ES2022), pp. 253-257, Online.

2022年4月16日土曜日

トレイン・ハック

昨晩,たまたま乗った電車のドアに貼られていた広告が,ちょいと私の目を惹いたので,写真を撮った.ブレイン・ハック(brain hacked)ならぬ,トレイン・ハック(train hacked)である.


数独,解けますか?

この問題,数独(ナンバープレイス)の問題としては,中級程度といったところだろうか.それほど難しいものではない.一見,埋めねばならない空欄は多いものの,ルールの制約に基づいて順番に数字を書き込んでいけば,順を追って素直に全部埋められる.自宅に帰って,エクセル方眼紙を使って解いてみたところ,悩まず楽しめるレベルだった.

しかし,さすがに頭の中だけで解くのは辛い.「降りるまでに解けますか?」という挑戦的なコピーに対しては,「書き込んで良いなら……」と答えざるをえない.しかし,公共広告だもの,マジックペンでもって書き込んじゃ,ダメよねえ.

空欄を数えてみると,56個ある.さすがに56ヶ所の数字を暗記して解答せよというのは,人間業を超えている(少なくとも私には無理).

プログラミング課題としての数独ソルバー

数独は,プログラミングのテーマとして面白いテーマの一つである.昔,ブルートフォース的に探索して数独を解くプログラムを紹介したことがある(こちらの記事.飯尾淳「数独を解く」Take IT Easy, 2012年7月17日).アルゴリズムは単純で,右上から順次,深さ優先探索を進めていき,ルールに合致しなくなったらバックトラックして最後まで探索するというものだ.適正な問題であれば必ず解があるはずなので,この方法で確実に解けるし,この程度の問題サイズであれば,探索は瞬時に終わる.

まあ,そうやって解いて面白いか?と問われると,それはパズルじゃない,という答えになろう.GoogleがアルファGoの開発をやめたとき,「以後,囲碁将棋などは,人間の頭で楽しむゲームとする」と潔く宣言したことと近いかも.

それはともかくとして,数独ソルバーをどうやって書くかには,プログラミングの面白さがある.先の記事で紹介したように,データ構造をうまく定義してやれば,再帰呼び出しによる探索関数を簡潔に書くことができて,美しいプログラムになる.

宣言型プログラミング言語を使用して,きれいなプログラムを書くことも難しくないだろう.世の中にはSQLで数独を解くプログラムを書くという,変態凄いひともいるらしい.

エンジニア募集?

「また,このような難問を生成するプログラムをつくることはできますか?」という問いかけも素晴らしい.数独とプログラミングといえばどうしても解くほうに注目がいくが,レベル感を設定して,解が一意に定まるような数独の問題を作るにはどうすればよいか?も,プログラミングの課題としてはそこそこ面白く,かつ,実践的な課題でもあろう.

ところで,この広告には,ひとつ,大きな瑕疵があることにお気付きだろうか?

「エンジニア・デザイナー募集」と書かれており,数独を題材にして「面白そうだな」と興味を惹く点で,広告としてはそれなりに機能していることはよい.問題は,誰がどう募集しているか,よくわからない点である.

右下にTOKYU CORPORATIONと書いてあり,この電車は東急電鉄の車両(私が乗っていたのは東京メトロの半蔵門線だけど)なので,東急がエンジニアやデザイナーを募集していることはわかる.では,その募集,乗った!という応募者は,どこに応募すればよいだろうか.車掌さんに聞く?まさかね.

まあ,積極性を求むということでWebなりなんなりで自分で調べよ,ということだろうが,ちょいと不親切なんじゃないかなーと思った次第.

2022年4月13日水曜日

プログラミングに数学の素養は必要か?

「プログラミングのための数学」という科目を2019年から担当している.高校では数IAしか学んでいませんという学生と,数IIIまでばっちりやりましたという学生が同時に履修しているので,なかなかやりにくい科目ではある.しかし,高校で学ぶべき数学のリメディアル教育を進めるとともに,数IIIまでしっかり学びましたという学生に向けて「大学レベルの数学」も提供するというアクロバティックな講義でもあり,やり甲斐はあると感じている.

プログラミングに使われる数学(再帰の理解)

さて,今日はそのイントロ,第1回めの講義が行われた.そこで「プログラミングに数学は必要か」という話題を入念に紹介した.

例の一つとして「ヒルベルト曲線の描画」を挙げた(以前,本ブログでも取り上げたテーマである).そもそもフラクタルとは何か?から説明する必要があったが,見た目に面白いので学生も興味深く聴いてくれたようである.ヒルベルト曲線に限らず,フラクタル図形の描画は,再帰を用いると簡単に描ける.自己相似形というその性質が,再帰の考え方と合致するからである.

再帰の考えは,慣れないと難しいとされている.プログラミングの試験問題に再帰呼び出しを入れると,正解率がガクンと下がるらしい.ただし,一度理解できれば漸化式をそのまま記述できるので,プログラムは読みやすくなる(はずである).

再帰呼び出しを理解するために数学の素養としてはなにが必要だろうか.まず,関数呼び出しの考え方は,数学における関数の考えと類似の概念である.したがって,関数とは何かを理解する必要があろう.また,高校数学では数列を学び,漸化式と数学的帰納法を学ぶ.その考え方をしっかりと理解していれば,再帰呼び出しはそれをプログラムで表現しているだけであるということに気付くであろう.

プログラミングに使われる数学(行列・線形代数)

ヒルベルト曲線を描画するには,線形代数の理解も不可欠である.平面に線を描画するので,座標の概念を理解していないといけない.また,再帰とアフィン変換を組み合わせて部分的な自己相似形を描画し,それを統合することで高次のフラクタルを描くので,座標変換のアイデアが必須となる.

それを効率的に記述するには行列の理解が不可欠である.例を示そう.次の例は,2次のヒルベルト曲線を描くプログラムである.

#!/usr/bin/env python


from turtle import *


SIZE = 300

penup_flag = True

tm = [

  [ [0.0, -0.5, -0.5], [-0.5, 0.0,  0.5], [0.0, 0.0, 1.0] ],

  [ [0.5,  0.0, -0.5], [ 0.0, 0.5, -0.5], [0.0, 0.0, 1.0] ],

  [ [0.5,  0.0,  0.5], [ 0.0, 0.5, -0.5], [0.0, 0.0, 1.0] ],

  [ [0.0,  0.5,  0.5], [ 0.5, 0.0,  0.5], [0.0, 0.0, 1.0] ]

]

e = [ [ 1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ]

p = [[-0.5, 0.5], [-0.5, -0.5], [0.5, -0.5], [0.5, 0.5]]


def affine_transform(m, p):

  return [ m[0][0] * p[0] + m[0][1] * p[1] + m[0][2],

           m[1][0] * p[0] + m[1][1] * p[1] + m[1][2] ]


def mat_mul(m0, m1):

  return [ [m0[0][0]*m1[0][0]+m0[0][1]*m1[1][0]+m0[0][2]*m1[2][0],

            m0[0][0]*m1[0][1]+m0[0][1]*m1[1][1]+m0[0][2]*m1[2][1],

            m0[0][0]*m1[0][2]+m0[0][1]*m1[1][2]+m0[0][2]*m1[2][2]],

           [m0[1][0]*m1[0][0]+m0[1][1]*m1[1][0]+m0[1][2]*m1[2][0],

            m0[1][0]*m1[0][1]+m0[1][1]*m1[1][1]+m0[1][2]*m1[2][1],

            m0[1][0]*m1[0][2]+m0[1][1]*m1[1][2]+m0[1][2]*m1[2][2]],

           [m0[2][0]*m1[0][0]+m0[2][1]*m1[1][0]+m0[2][2]*m1[2][0],

            m0[2][0]*m1[0][1]+m0[2][1]*m1[1][1]+m0[2][2]*m1[2][1],

            m0[2][0]*m1[0][2]+m0[2][1]*m1[1][2]+m0[2][2]*m1[2][2]] ]


def screen_pos(x):

  return (x[0]*SIZE, x[1]*SIZE)


setup(width = 2*SIZE, height = 2*SIZE)

color('red')

width(5)

hideturtle()


penup()

for m in tm:

  p2 = [ affine_transform(mat_mul(e, m), x) for x in p ]

  for x in p2:

    goto(screen_pos(x))

    if penup_flag:

      pendown()

      penup_flag = False


onkey(exit, 'q')

listen()

mainloop()

ここでも行列の考え方は使っているが,この計算はずいぶんと大変な印象を受ける.一方,これをNumPyの行列計算ライブラリを利用することで,次のように実に簡潔に書ける(再帰を使ってn次のヒルベルト曲線を描くようにすると,実は,もっと単純化することができる).

#!/usr/bin/env python


from turtle import *

import numpy as np


SIZE = 300

penup_flag = True

tm = [ np.matrix(x) for x in [

  [ [0.0, -0.5, -0.5], [-0.5, 0.0,  0.5], [0.0, 0.0, 1.0] ],

  [ [0.5,  0.0, -0.5], [ 0.0, 0.5, -0.5], [0.0, 0.0, 1.0] ],

  [ [0.5,  0.0,  0.5], [ 0.0, 0.5, -0.5], [0.0, 0.0, 1.0] ],

  [ [0.0,  0.5,  0.5], [ 0.5, 0.0,  0.5], [0.0, 0.0, 1.0] ] ]

]

e = np.eye(3) # 3次の単位行列

p = [ np.matrix(x).T for x in [

      [-0.5,  0.5, 1.0], [-0.5, -0.5, 1.0],

      [ 0.5, -0.5, 1.0], [ 0.5,  0.5, 1.0] ] ]


def screen_pos(x):

  return (x[0,0]*SIZE, x[1,0]*SIZE)


setup(width = 2*SIZE, height = 2*SIZE)

color('red')

width(5)

hideturtle()


penup()

for m in tm:

  for x in [ e * m * x for x in p ]:

    goto(screen_pos(x))

    if penup_flag:

      pendown()

      penup_flag = False


onkey(exit, 'q')

listen()

mainloop()

しかし,このプログラムを理解するためには,行列の概念を学んでおく必要がある.「np.matrix(x).T」というコードの「.T」が,転置行列を表すという例が端的な例であろう.転置行列とは何か,単純な概念ではあるが,知らないとわからない.

基礎は大切.プログラミングも数学も

プログラミングに数学は必要か?という質問に対する答えは「直接的には必要ない場合も多いようにみえるかもしれない,しかし,数学を学んだほうが,効率的で間違いのないプログラミングを実現できる」と答えておこう.相次ぐシステムトラブルも,数学を忌避してよけいな回り道を通った実装の結果ではないかと穿った見方をしているが,それは意地悪すぎだろうか?