窓辺の小石 第162回 ビット文学
マイナビニュース2024年4月19日(金)15時45分
現在のWindows 11 Ver.23H2では、Windows Copilotと呼ばれるAI機能が利用できる。適当な質問文を入れることで、Copilotが回答してくれる。回答には少し時間がかかるが、Windows 11を使っているならタダでAIが利用できる。
筆者は、自分の仕事をAIに任せたいとは思っていない。というのも、AIに仕事をやらせてみたとしても、その責任を持つのは自分なので、結局、全部を検証しなくてはならない。遠い未来、検証が不要な生成AIも登場するかもしれないが、おそらく筆者は仕事していないだろうから、いまからAIに仕事をさせるような準備も不用である。
しかし、実際に使ってみると便利な点もある。たとえば、インターネット検索の代用として利用できる。インターネット検索を直接行うのと比べて、ノイズが少ないというのが筆者の印象である。
たとえば、特定の言語でのループや条件判断についての質問「××のループ構文」などでインターネット検索を行うと、初心者向けの長い解説記事などが先頭に多数列挙される。筆者などは、単刀直入に文法だけを知りたいのだが、先頭に表示されるページの多くは冗長で、肝腎のところにいくまでに何回もスクロールが必要になる。筆者としては、たとえばPythonがちょっと不慣れなので、ループ構文を全部知りたいのだが、そもそもループとは? から始まり、延々とfor文を解説しているページには用がない。また、言語の公式マニュアルページなどは、逆に整理されすぎていて、forやWhileといった個々のステートメントのページに分かれているなど、一覧性に欠けることがある。
こうしたとき、Copilotだと、複数のページから要約した回答を出してくれる。これで、趣味の楽しい時間なのに、インターネット検索して、「あー、こんなページ見たくもねぇよ」なんてイライラせずに済む。
もう1つは、面倒な関数やAPIの使い方を調べる場合だ。C#から、Win32APIを呼び出すのには、P/Invokeと呼ばれるものを使う。Win32APIの関数がどのDLLにあり、引数はどうなっているのかを記述することで、.NET環境(マネージ環境と呼ばれる)からWin32API(同アンマネージ環境)の関数を呼び出せる。そもそも、Win32APIは、C/C++からの呼び出しを想定しており、.NET環境とはメモリの使い方も関数の呼び出し方法も異なる。C/C++からなら複雑な構造体でも宣言するだけで済む。しかし、メモリが管理されているC#では簡単ではないことがある。有名な関数なら、インターネット検索でも簡単に調べることができるのだが、著名でない関数を使おうとすると、かなり面倒なことになることがある。
こうしたものにHidP_GetButtonCaps関数とHIDP_BUTTON_CAPS構造体がある。なぜ、これが面倒なのかというと、構造体の中にunion(共用体)があり、構造体の中の値を使って、共用体のどちらを使っているのかを切り替えて扱う必要がある。これをP/Invokeで直接表現することは難しく、インターネット検索すると、アンマネージメモリ領域を確保して渡す、構造体の要素の個々にオフセット値を設定するなどの方法しか見つけることができなかった。しかも、どれもうまくいかなくて、筆者は、苦労した上で、共用体の要素の名前が違うだけで要素のタイプはまったく同じことに気がついた。何のことはない、共用体を使わなくてもいいのである。
試しにCopilotに「Win32APIのHidP_GetButtonCapsをC#から呼び出すにはどうしたらいいですか」という質問をしたら、あっさりと共用体を使わない構造体定義を使う方法を提案してきた(写真01)。筆者は、この方法をインターネット検索では見つけることができず、試行錯誤の上見つけた。しかも、このソースコードに関しては公開もしていない。
また、以前、この連載で紹介したLocalDirServer(窓辺の小石(159) 忘却の惑星も、「node.jsを使って、HTTPプロトコルでURLから指定されたローカルフォルダをエクスプローラーで開くプログラムを作ってください」と質問したら、筆者の作成したプログラムと似たようなものが出てきた(写真02)。こちらはローカルパスを指定するのにクエリーを使い「?folder=<パス>」と指定するURLを使い、筆者の作成したものとは少し異なる。
Copilotが追記する参考Webページには、直接、この方法を記述したページもない。このやり方がインターネット内に絶対存在しないとは断定できないが、少なくともCopilotは、質問が理解できれば、適切と思えるコードを提案できるようだ。
そういうわけで、最近では、インターネット検索する前に、まずCopilotに「お伺い」をたてることにしている。
今回のタイトルネタは、スタニワフ・レムの「『ビット文学の歴史』第一巻 ジュアン・ランベレーほか」から取った。この作品は、「虚数」(Wielkość urojona. 1973年。邦訳 国書刊行会1998年)に含まれている。同書は、存在しない本の前書き、序文などを扱った作品てある。ビット文学とは、人間以外の書き手による文学のことである。
筆者は、自分の仕事をAIに任せたいとは思っていない。というのも、AIに仕事をやらせてみたとしても、その責任を持つのは自分なので、結局、全部を検証しなくてはならない。遠い未来、検証が不要な生成AIも登場するかもしれないが、おそらく筆者は仕事していないだろうから、いまからAIに仕事をさせるような準備も不用である。
しかし、実際に使ってみると便利な点もある。たとえば、インターネット検索の代用として利用できる。インターネット検索を直接行うのと比べて、ノイズが少ないというのが筆者の印象である。
たとえば、特定の言語でのループや条件判断についての質問「××のループ構文」などでインターネット検索を行うと、初心者向けの長い解説記事などが先頭に多数列挙される。筆者などは、単刀直入に文法だけを知りたいのだが、先頭に表示されるページの多くは冗長で、肝腎のところにいくまでに何回もスクロールが必要になる。筆者としては、たとえばPythonがちょっと不慣れなので、ループ構文を全部知りたいのだが、そもそもループとは? から始まり、延々とfor文を解説しているページには用がない。また、言語の公式マニュアルページなどは、逆に整理されすぎていて、forやWhileといった個々のステートメントのページに分かれているなど、一覧性に欠けることがある。
こうしたとき、Copilotだと、複数のページから要約した回答を出してくれる。これで、趣味の楽しい時間なのに、インターネット検索して、「あー、こんなページ見たくもねぇよ」なんてイライラせずに済む。
もう1つは、面倒な関数やAPIの使い方を調べる場合だ。C#から、Win32APIを呼び出すのには、P/Invokeと呼ばれるものを使う。Win32APIの関数がどのDLLにあり、引数はどうなっているのかを記述することで、.NET環境(マネージ環境と呼ばれる)からWin32API(同アンマネージ環境)の関数を呼び出せる。そもそも、Win32APIは、C/C++からの呼び出しを想定しており、.NET環境とはメモリの使い方も関数の呼び出し方法も異なる。C/C++からなら複雑な構造体でも宣言するだけで済む。しかし、メモリが管理されているC#では簡単ではないことがある。有名な関数なら、インターネット検索でも簡単に調べることができるのだが、著名でない関数を使おうとすると、かなり面倒なことになることがある。
こうしたものにHidP_GetButtonCaps関数とHIDP_BUTTON_CAPS構造体がある。なぜ、これが面倒なのかというと、構造体の中にunion(共用体)があり、構造体の中の値を使って、共用体のどちらを使っているのかを切り替えて扱う必要がある。これをP/Invokeで直接表現することは難しく、インターネット検索すると、アンマネージメモリ領域を確保して渡す、構造体の要素の個々にオフセット値を設定するなどの方法しか見つけることができなかった。しかも、どれもうまくいかなくて、筆者は、苦労した上で、共用体の要素の名前が違うだけで要素のタイプはまったく同じことに気がついた。何のことはない、共用体を使わなくてもいいのである。
試しにCopilotに「Win32APIのHidP_GetButtonCapsをC#から呼び出すにはどうしたらいいですか」という質問をしたら、あっさりと共用体を使わない構造体定義を使う方法を提案してきた(写真01)。筆者は、この方法をインターネット検索では見つけることができず、試行錯誤の上見つけた。しかも、このソースコードに関しては公開もしていない。
また、以前、この連載で紹介したLocalDirServer(窓辺の小石(159) 忘却の惑星も、「node.jsを使って、HTTPプロトコルでURLから指定されたローカルフォルダをエクスプローラーで開くプログラムを作ってください」と質問したら、筆者の作成したプログラムと似たようなものが出てきた(写真02)。こちらはローカルパスを指定するのにクエリーを使い「?folder=<パス>」と指定するURLを使い、筆者の作成したものとは少し異なる。
Copilotが追記する参考Webページには、直接、この方法を記述したページもない。このやり方がインターネット内に絶対存在しないとは断定できないが、少なくともCopilotは、質問が理解できれば、適切と思えるコードを提案できるようだ。
そういうわけで、最近では、インターネット検索する前に、まずCopilotに「お伺い」をたてることにしている。
今回のタイトルネタは、スタニワフ・レムの「『ビット文学の歴史』第一巻 ジュアン・ランベレーほか」から取った。この作品は、「虚数」(Wielkość urojona. 1973年。邦訳 国書刊行会1998年)に含まれている。同書は、存在しない本の前書き、序文などを扱った作品てある。ビット文学とは、人間以外の書き手による文学のことである。
「文学」をもっと詳しく
「文学」のニュース
-
5月16日は「旅の日」。6月に行きたい「源氏物語」をテーマに巡る[滋賀・京都]文学の旅5月16日13時46分
-
島崎藤村、文学者としての成功の礎となった「悲恋」とは?教え子に恋するも告白できずに小説に綴るじれったさ5月16日8時0分
-
本屋が仕掛ける、“ココでしか買えない”読書体験「華麗に文学をすくう?」6月1日(土)予約開始! 〜双子のライオン堂と、書泉が共同プロジェクトで。全国の本屋でも販売したいです〜5月15日19時46分
-
ただの女性好き?島崎藤村、大人気となった詩集『若菜集』に綴られた、モテない男のイタい女性観5月15日8時0分
-
愛子さま 巻き髪に大きなリボン、35センチばっさりでボブに…華やぐ髪型七変化5月15日6時0分
-
SNSや各メディアが「Wikipedia三大文学」に夢中!幻のノンフィクション『死の貝 日本住血吸虫症との闘い』早くも3刷決定!!5月13日12時46分
-
愛子さま、初の単独公務…国立公文書館の特別展「夢みる光源氏」を視察5月11日22時14分
-
愛子さま、平安文学展に=初の単独公務—東京5月11日20時44分
-
純文学少女歌劇団の新曲『カレイドスコープ』が初のドラマオープニングテーマに決定!5月31日(金)より配信リリース開始5月10日18時46分
-
Amazon先行予約で「文学・評論」TOP10入り! 注目の読書エッセイがいよいよ発売5月10日12時16分