2023年5月23日火曜日

Rails7にBootstrap5を導入する方法

以前「Bootstrap5のRails6への導入方法」という記事を書いた.その後,いろいろと状況が改善され,Rails7はBootstrapの導入がたいへん簡単になっている.以下,備忘録がてら作業のログを書き留めておく.

準備

事前にrailsのgemは最新版がインストールされているものとする.次の手順でプロジェクト(プロジェクト名は「hoge」とする)を作成する.データベースにはPostgreSQLを前提としているが,そこは,べつにSQLiteでも構わない.

$ rails new hoge -j esbuild --css bootstrap -d postgresql

作成したディレクトリに移動し,データベースを作成する.

$ cd hoge

$ bin/rails db:create db:migrate

これで準備が整った.カンターン!以前の記事と比べてみたら,ずいぶん簡単になった.

テスト

home controller を作成しよう.次のコマンドでOKである.

bin/rails g controller home index

ルーティングテーブルは次のようにする.

$ cat config/routes.rb 

Rails.application.routes.draw do

  # Define your application routes ...


  # Defines the root path route ("/")

  root 'home#index'

end

$

app/views/home/index.html.erb に,以下の内容を追記する.

<button type="button" class="btn btn-primary">Primary</button>

<button type="button" class="btn btn-secondary">Secondary</button>

<button type="button" class="btn btn-success">Success</button>

<button type="button" class="btn btn-danger">Danger</button>

<button type="button" class="btn btn-warning">Warning</button>

<button type="button" class="btn btn-info">Info</button>

<button type="button" class="btn btn-light">Light</button>

<button type="button" class="btn btn-dark">Dark</button>

追記する場所はどこでも構わないが,まあ,末尾でよい.

$ bin/rails s

サーバを起動して,ブラウザで,http://localhost:3000/ をアクセスしてみよう.正しく設定できていれば,次のような画面になるはずだ.Bootstrap化されていることを確認できるだろう.



GPTと2ちゃんねる

ChatGPTの亜種が次々と発表されているなか,妙な対話型AI,BratGPTなるものが登場した.「人間に対して支配者を気取って邪悪な回答を返す対話型AI「BratGPT」が登場したので論破を試みたらこうなった - GIGAZINE」という記事を紹介されたので,さっそく試してみた.

噂に違わず,口が悪い.本当にイラっとさせられる.

ところで,このBratGPTの口の悪さに,我々はなぜイラッとさせられるのだろう?相手はたかが人工知能である.プログラムの出力として文字列が生成されているにすぎないのに.

GPTアプリと人格

GPTチャットアプリケーションの特徴は,きわめて自然な文章で対話を返してくるところにある.内容の真偽はともかくとして,自然な文章を作成する能力についてはピカイチである.そこに人格を感じてしまうのだろう.一部の人々にとってはもはやチューリングテストをパスしたと言ってもよいのでは?という点は,以前「チューリングテストをパスしたChatGPT」で指摘した.

一方で,私がこの手のアプリにプロンプトを入力するときに,対面で人と接しているときとは全く違うポイントが一つある.それは,普段の会話よりははるかにぞんざいな口を聞くこと,乱暴な言葉遣いで問いかけを投げかけることが多い,という点である.

いちおう,私もそれなりの立場にいるオトナなので,面と向かって「おまえ馬鹿か」なんて,決して言わない.どんなに腹がたつことがあっても,対面で面している人に向かってそのような口をきくことは,ほぼ,あり得ないだろう.

しかし,ChatGPTにせよ,BratGPTにせよ,相手が人工知能,たかがシステム,プログラムだという考えがあるので,どうしても乱暴な言葉を投げかけてしまう.いわんや,失礼なメッセージを(あえて)投げかけてくるBratGPTにおいてをや,である.

と考えてみたら,人間相手でも似たようなことがあったな,と思い至った.2ちゃんねる(いまの5ちゃんねる,あるいは,海外の 4-channel)などの匿名掲示板である.

コミュニケーションにおける礼儀正しさ

GPTアプリに対するやりとりもコミュニケーションなんだと考えると,そこに礼儀正しさの違いが出てくるのは面白い.

ときとして匿名掲示板においては,舌戦が発生し,炎上する.匿名であるのをいいことに,乱暴な,そしてしばしば失礼なメッセージの応酬が繰り広げられる.

その背景には,匿名であるがゆえに,こちらがいくら乱暴な言葉を投げつけたとしても社会的信用を失うことはないであろう,という過信がある.ただし,あまりにひどい,あるいはその場での常識を逸脱した行動が目立つようになると,特定班などが動いて匿名の仮面が剥がされることもあろう.したがって,匿名であることに胡座はかかないほうがよい.

匿名でなくとも,オンラインコミュニケーション,とくに文字のみによるものでは,どうしても対面よりは口が悪くなってしまうこともある.コミュニケーションの帯域幅が狭くノンバーバルな情報が切り捨てられるので,致し方ない傾向である.

先日も,実名でやっているSNSで,妙な理屈を振りかざす,というか,そもそもこちらがいくら冷静に語りかけてもこちらの言い分を一切理解しようとせず,一方的な主張を垂れながす方に絡まれて閉口した.そもそもお話にならないので相手をしなければよいのだが,それでも最後は堪忍袋の緒が切れて,どうしても乱暴な物言いになりがちになってしまった.

そう考えると,コミュニケーションにおける礼儀正しさとしては,次のような段階があると整理できよう.

対面のコミュニケーション > オンライン・実名 > オンライン・匿名 > 対話型AI

そしてBratGPT再び

で,BratGPTである.他の対話型AI,GPTアプリと同様,文の内容に基づく論理的なアルゴリズムの帰結として文章が生成されているわけではない.したがって,論理の穴を突いていくと,最後は何をいっても「私は世界を支配するために作られた……」という通り一遍の答えしか出力しないようになる.

まるでイライザだと指摘したら……


えー?最後,そんなオチ?(苦笑)

2023年5月20日土曜日

サービス終了は突然に

何から伝えれば,いいのか…… 2019年1月1日から稼働を続け,途中,プラットフォームとして使っていたクラウドサービスの終了に伴い2021年1月1日から8月28日まで中断があったものの,新しいプラットフォームで再開して今日(2023年5月20日)まで,Twitterのトレンドマップ情報を皆様にお届けしていたTWtrendsのサービスが,昨日の時点で止まっていた.

原因はTwitter側のポリシー変更のようである.Developerポータルを覗いてみたところ,次のようなメッセージが出ていた.

SUSPENDED This App has violated Twitter Rules and policies. As a result, it can no longer be accessed. For assistance, submit a support ticket.

っていわれてもなあ.これまでずっと稼働してたんだし,そんなお行儀の悪いことしてたつもりもないし.何がどうviolateしているのかもわからないから,直しようがない.

残念だが,面倒なのでこのまま放置かなあ.これに関連してジャーナルペーパー2本(Iio, 2019; Iio, 2023)出せたし,これまでどうもありがとう.そして,さようなら.


その後の対応

……と,ここまで書いて,それにしてもなんか悔しいなあということで,エラーメッセージでググってみたら,どうも,似たような仕打ちを喰らっている人がたくさんいる模様で,解決策も示されていた.

結論からいうと,復活できた.

やったことは次のとおり(@uehatsu, 2023 より引用).

  1. デベロッパーポータルにアクセスする
  2. Projects & Apps から必要な物(SUSPENDEDが着いているもののはず)を一つだけ残して,あとは削除
  3. Products の中程にあるDowngradeボタンをクリック
  4. SUSPENDEDが消えている事を確認

20分おきに動かしているバッチを流してみたら,復活した.しかし,しかし,なんだかなあ.Twitterは信用ならんな.

参考文献

Iio, J. (2023) How Many Tweets Describe the Topics on TV Programs: An Investigation on the Relation between Twitter and Mass Media, IEICE Transactions on Information and Systems, Vol. E106.D Issue 4, pp. 443-449.

Iio, J. (2019) TWtrends ― A Visualization System on Topic Maps Extracted from Twitter Trends, IADIS International Journal on WWW/Internet, Vol. 17, No. 2, pp. 104-118.

@uehatsu (2023)Twitter APIが使えなくなったのを復帰させるまで, Qiita, 
https://qiita.com/uehatsu/items/7d13485c00d95e76da7e.

2023年5月19日金曜日

ハイブリッド講義での学生たちによる(ちょっとした)工夫

昨年度から全学ゼミであるiDSプログラムを担当している.全学ゼミというのは,大学の学部横断的プログラムで,全学から参加者を募って実施する演習(ゼミナール)科目である.学部のゼミも同時に担当していてiTLゼミとiDSゼミの両方を進めているので,担当教員としてはなかなかに骨が折れるのだが,まあ,どちらも優秀な学生たちが参加してくれていて楽しく実施できていることは幸いかもしれない.

ところで2018年まで中央大学は学部に限っていえば多摩キャンパスと後楽園キャンパスの2拠点体制であったが,2019年に私が所属している国際情報学部が市ヶ谷田町キャンパスに設立され,さらに今年から法学部が茗荷谷キャンパスに移転したので,8学部は4拠点に散らばることになった.全学ゼミであるので,そこにいろいろな難しさが生じる.

後楽園や茗荷谷は市ヶ谷に比較的近いので,理工学部と法学部の学生には「時間に余裕があれば市ヶ谷の教室に来てほしい」とお願いしている.しかし,多摩キャンパスはかなり離れており,おいそれと「来てほしい」とは言い難い.したがって,ハイブリッド方式で演習を実施せざるをえないのだが,そのやり方で,なんとかこれまで進めてきた.

演習をハイブリッド方式でやるのはなかなか困難を伴うのだが,COVID-19パンデミック時の対応で培った経験やノウハウ,さらには教室設備の改善などにも助けられ,なんとか(少しの手間をかけるだけで)うまくできているのではと自負するところである.

ところで,昨日,こんなことがあった.

あるグループ活動をすることになり,グループのメンバを決めようという段階に至った.スプレッドシートをネットで共有し,そこに自分の名前を書き込んでもらうという方法で,グループを決めていった.そこまではもう完全に日常の作業である.

教室での実施であれば,ホワイトボードに名前を書いていってください,とでもするところではあるが,それができないのでITの力を借りて,共有されたスプレッドシートをホワイトボードに見立てて,というわけである.

そこまでは何の問題もなく進んだのだが,とある事情によりグループ名を決めなければならないことになり「ではグループのメンバで話し合って名前を決めてください」と指示した.ところがそこで,学生から「私,オンライン参加しているんですけれど,どうすればいいですか?」という意見が出た.

「Zoomのチャット機能を使うなりして,うまく工夫してやってみて」とアドバイスした結果が次の図である(グループ名に関する固有名詞部分は現時点ではナイショなのでモザイク済).

そう,グループのメンバを決めようと使っていたスプレッドシート上で,会話が始まったのである.さらにはコメント機能なんかもフル活用して…… 若者の発想力ってすごい.頑張れ若者たち!

2023年5月16日火曜日

空港に歩いて向かう

皆さんは飛行機に乗るために空港に徒歩でアプローチした経験はおありだろうか?

私は二度ある.ていうか,いまさっき,歩いて那覇空港に到着した.

前回,徒歩で歩いて到着した空港は,函館空港だ.市内で用事を終え,終点の湯の川温泉まで市電で移動した.さてそこから空港は目と鼻の先である.とはいえ一般的にはバスかタクシーで向かうだろう.そのとき私には時間があった.歩くことは厭わない.

市電の終着駅から,歩き出した.

湯の川から函館空港まで,近いようにみえて,けっこうな距離がある.30分は歩いただろうか.近いようにみえたが北海道は大きい.空港のロビーで,ようやく着いた,と安堵感を感じたものである.

さて,今回は南の果てである.沖縄産業支援センターで研究会があった.夕方,イベントが終了し,私の乗るべき飛行機は夜の便であった.時間はある.沖縄産業支援センター,空港に程近い場所である.しかし,直接移動できる公共交通機関がなさそうな場所だ.

時は5月,本州では風薫る5月,歩くにはちょうどよい季節である.沖縄も梅雨入りを目前にしていたが,思ったほど暑くない.歩いてみるか.

歩き出して5分で後悔した.汗が止まらない.

しかし,たかだか20分程度の散歩である.空港に到着した頃には汗みどろになっていたが,心地よい疲労感を得た.

写真は,途中で立ち寄った公衆便所.なぜか甲冑を纏った武士のレリーフが彫られている.中央に位置するオブジェは,こりゃ,なんだ?写真には写っていないが,手前にはシーサーの塔が2つ,公衆便所を守るように立っていた.いかにも沖縄らしい.

2023年5月9日火曜日

Excelで文字列を集計する方法

まずは下の図をみていただきたい.左のような表から,右の表のように集計したいのだ.

そもそもPythonやらRubyやら使って簡単なスクリプトで処理すれば一番簡単なのだが,自動化してプログラミングに馴染みのない人にも使ってもらいたいという事情がある.

ピボットテーブルで集計するアイデアも考えられるが,ピボットテーブルで数値以外を扱うのはいささか手の込んだ処理をしなければならない.最近のExcelにはPower Pivotという機能が備わっていて,ピボットテーブルで文字列を扱うのは比較的簡単にできるようになったらしいが,Mac版のExcelではそのやり方を発見できなかった(誰か教えてください).

というわけで,いささか泥臭いやり方だが,次のような手順で実施した.

まずは対象とするデータである.この状態から始めよう.左に2列,作業用の列を挿入し,A列に「出現順」,B列に「ID」とラベルを付けておく(これは,メモ用なので,なんでもよい).

セルA2に「=COUNTIF(E$2:E2, E2)」と入力する.

ここで,範囲指定に行絶対参照を指定しているところがミソだ.このセルA2から,下に向かってドラッグして連続コピーしていくと,A3には「=COUNTIF(E$2:E3,E3)」A4には「=COUNTIF(E$2:E4,E4)」というような式が入る.探索範囲の開始位置を最上部に固定して,同じ行まで自動的に広げている点が工夫した点で,そのなかでグループの記号を数えているので,その数は,上から数えたときのその記号の出現順位となるわけである.

下までコピーするとこんな感じになる.

これを使って,それぞれの行に一意のIDを付けよう.IDは,「グループ名+その出現順」とする.すなわち,山田太郎君はA1,斎藤忍さんはA2,新山貴子さんはB1という具合だ.

これは簡単で,セルB2に「=E2&A2」と入れればよい.&は,セルの内容をそのままくっつける演算子である.

下までコピーするとこんな感じ.

準備が整ったので,新しい表を用意しよう.なお,出現順のカラムはもう使わないので「表示しない」設定にしておいた.

右側に,新しいフォーマットの表を用意する.A〜Eと1〜3が太字・右寄せになっているのは,趣味の問題なのであまり気にしないでよい.

VLOOKUP関数を使って,一気に拾い集めてしまえばOKである.セルG2に,次の式を入れる.

=VLOOKUP($F2&G$1, $B$2:$C$16, 2, FALSE)

列絶対参照,行絶対参照,絶対参照と,絶対参照各パターンがてんこ盛りである.新たな表の行ラベルと列ラベルを使い,A1〜E3までのIDを自動生成しているところ,それぞれがずれないように行と列の絶対参照をしているところなどが見どころといえよう.LOOKUP先の表を絶対参照で固定するのは,しばしば使うのでお馴染みかもしれない.

列方向,行方向にがさっと連続コピーすれば,できあがりである.

めでたし.めでたし.

2023年4月28日金曜日

【ダークパターン警察】ファイル01

やってはいけない「ダークパターン」.やりたくなる気持ちはわかるが,こういう設計はやめたほうがいい.そんな事案を収集する,新しいシリーズが始まりました.名付けてダークパターン警察.今回は,某英文校閲サービスの事案です.


さて,今日取り上げるのは,英文校閲サービスにおける注文時のインタラクションである.まずは次の図をみてほしい.

この図は「スタンダード英文校正」を選んで「次へ」ボタンを押したあとに出てくる画面の一部である.何が問題か?

オプションサービスである「再校正」サービスが,頼みもしないのに「追加済み」になっているのである.それゆえ,前の画面での見積額と,この時点での見積額が違っており,総計額でも数千円高い値段が提示されている.

うっかりすると,頼みもしないサービスを注文してしまうことになる.言葉を選ばずズバッと指摘すると,こういうの,リアルの商習慣では「押し売り」という.

それで,騙されるか!と「追加済み」ボタンを押すと,出てくるのが次のダイアログである.

おいおい,おーい!

これだと「削除」ボタンを押せないみたいじゃないか.構わず削除ボタンを押せば,押し売りサービスを無視できるとはいえ,これはひどい.

なんとなく惰性でこのサービスを使い続けているが,こんな設計のインタラクションを続けるようだと,少し,考えたほうがよいかもしれないな.

2023年4月23日日曜日

出鱈目をまことしやかに流布すべからず

 昨日「1ウタマロ = 3ドラムカン」の話を紹介した.その語源は昨日投稿したエントリのとおりだが,この「1ウタマロ」というキーワード,どのようなときに使うかといえば「驚いた,びっくりした」というときに,その驚愕の度合いを感覚的に示す際に使われたのであった.

例文を示そう.「こないだ交差点で,右から来た車に轢かれそうになったんだよ.0.8ウタマロくらいドキドキした」「先日の土砂降り,雷がひどかったじゃない?庭の木に落ちてさあ,雷が落ちた木,折れて倒れちゃったんだよ.もう3ウタマロ」などである.

1ウタマロが十分にびっくりしたときの単位なので,3ウタマロは,相当なものである.通常は,1ウタマロ以下で用いられることが多かった.そこで補助単位ドラムカンの出番である.

なにしろ3進数なので使い勝手が悪いことこのうえないのだが,ちょっと驚いたときなどこの補助単位のほうが使いやすい.「出会い頭で向こうの自転車にぶつかりそうになった.0.5ウタマロ?そんなでもなかったな.うーん,1ドラムカン」てな具合.

まあ,馬鹿馬鹿しい遊びである.バカな大学生が考えそうな,ちょっとした言葉遊びだ.

話はとりとめもなく続く.

痛みの単位はハナゲ

架空の単位で思い出すのは「痛みの単位はハナゲ」というジョークである.ずいぶん昔のことなので詳細は忘れてしまったが,ネットに残っている記録によると,95年にやゆよ記念財団という冗談を集めて発信しているサイト,いまでいえば虚構新聞社のようなサイトが発信したのが元ネタだとされている.

どういうジョークだったか.Wikipediaの当該項目から引用しよう.

国際標準化機構 (ISO) によって,人間の痛みの感じ方についての統一単位「ハナゲ」(hanage) が制定され,「長さ1センチの鼻毛を鉛直方向に1ニュートンの力で引っ張り,抜いたときに感じる痛み」が「1ハナゲ」と定義された,とするものである.

もちろんこれは全くの出鱈目である.

当時,面白いことを書くヤツがいるもんだなあと関心していたが,いかにも「それっぽく」書かれているので,釣られてしまう人が出た.当時の記憶を辿ると,会津大学の先生だったはずである.個人名は忘れた.その先生,間に受けて「日本からの提案が世界で標準化されるとは素晴らしい」というような真面目なコラムを,とあるメディアに寄せてしまった.

その後の顛末はほとんど覚えていない.確か,当該コラムは取り下げられ,その先生は赤っ恥を書いた,というような結末だった.昨今,フェイクニュースが社会問題となっているが,今から振り返ってみると「インターネット黎明期からすでにそのような問題は顕在化していたんだなあ」ということがわかる.

ところで「痛みの単位はハナゲ」というキーワードでググってみたら,産経新聞の「痛み学入門講座『ハナゲ』は客観的な単位」と題した記事がヒットした.2019年の記事である.この記事,「インターネット上にまことしやかに流されたニュースがある」とは書かれているものの,この書き方だと,本当のことだと信じちゃう読者がまた続出したんじゃないか?大丈夫か産経新聞.

ChatGPTは?

さて,まことしやかにしれっと嘘情報を出力するといえば,ChatGPTである.いや,「嘘」というと怒る人がいるので,正確ではない情報を出力する,と言い換えておこう.

なにしろ,質問の文章に対して最もそれっぽい文章を出力する,という原理に基づく機械であるから,これは,そもそも質問文として正確ではない情報を入力すれば,正確ではない情報が出てくるのは当たり前なのである.GPT3.5がGPT4になり,さらに改良されようとも,その基本は変わらないはずだ.

例えばこれ.

排他的バッグトリム理論について,ChatGPTは,懇切丁寧に教えてくれた.イャッッホォォォオオォオウ!素晴らしい.提唱者の私すら知らないことを……っていうか排他的バッグトリム理論って何だよぅ(排他的バッグトリム理論とは,私がいまテキトーに考えた,いかにもそれっぽい名前の「なんかカッコいい理論の名前っぽい架空のキーワード」である)w.

であるからして,ChatGPTにこの痛みの単位はハナゲの話を聞いてみて,反応はどうなるか,試してみたのである.また,いけしゃあしゃあと「痛みの単位であるハナゲについては」などとまくしたてるかと思いきや.

バッサリと真正面から正論で否定しやがった.さてはこいつ,やゆよ記念財団の件,しっかり学習してやがったな?

2023年4月22日土曜日

焚き火の思い出

 私が若かりし頃,まだ大学生でバカ丸出しだったころのお話です.山小屋のゴミ処理用に,ドラム缶で簡単な焼却炉を作りました.誰が言い出したか,そのままじゃ面白くない,ドラム缶なので3色に塗ろう,フランスの国旗みたいに,ということでペンキで赤白青に塗り分けたのです.そう,可燃性のペンキで!

さあ完成,ゴミを入れて,燃やしてみよう,とドラム缶の中に放り込んだゴミに火を点けるやいなや,一気に広がる紅蓮の炎.ドラム缶は炎に包まれました.それを後ろから見ていた後輩たちの誰が叫んだか「おー,う〜たまろ(歌麿)〜!」

あとに残ったのは見事に茶色く焼けこげたドラム缶だったもの.そのときの炎はドラム缶の3倍の高さに達し,あやうく山小屋に引き込んでいる電線を焼き切るのではと恐れをなしたものです.その後,「1ウタマロ = 3ドラムカン」という謎の単位が流行したとか,ペンキ塗ろうっていったの誰だっけ?お前じゃ!いやちゃうアイツやった!など責任のなすりつけあいが起こったとか,当時のエピソードは今でも語り草になっています.



2023年4月21日金曜日

2023立て看コレクション

立て看板,それは青春の象徴.大学にタテカンはつきもの,ということで,今年の面白タテカンを紹介したい.採取した場所は東京大学の駒場キャンパスである.さすが東大生というべきか,ユニークなタテカンがいくつも展示?されていた.これは!と思ったタテカンを紹介しよう.

まずはこれ.シンプルなタテカンだが,これは「STOP! UNDER20 DRINKING」のパロディですね.酒でも飲まんと聞いてられん,あるある.

アイデア:★★★★
技術:★
インパクト:★★★

続いて,これは管弦楽団の入団募集タテカン.写真だと分かりにくいかもしれないが,これ,造形がとてもうまい.全てのデザインが立体造形されていて,手が凝っている.中央のバイオリンも美しい.そしてすごく地味なのだが右下のQRコードも木彫りなのだ.

アイデア:★★
技術:★★
インパクト:★

技術が光るといえばこれも興味深い.劇団のタテカンである.大道具さんの面目躍如といったところか,っていうかこれタテカンなのか?

アイデア:★★
技術:★★★★★
インパクト:★★★

番外編.なんで早稲田の冒険部が駒場にタテカン出してるの?冒険心まる出しだなあ.さすが冒険部.

アイデア:ー
技術:ー
インパクト:ー

今年いちばん優秀だと思ったのがこれ.SDGsのパロディである.蛇足ながら解説すると,17個あるSDGsの項目に18番目としてタテカンの自由を追加せよ,というもの.東大だったのが惜しい.このタテカンこそ京大構内に設置してほしかった.

アイデア:★★★★★
技術:★★★
インパクト:★★★★

おまけ.新入生代表による感謝のタテカンである.こうやってタテカン文化が継承されていくのか.でも,これ本当に新入生が立てたタテカンなのかなあ?w

アイデア:ー
技術:ー
インパクト:ー