2023年2月第1週のヘッドライン
2023年2月第1週に,うみのがネットで気になった記事をご紹介します.一週間のまとめとして,週末のお供として,どうぞお付き合いください.
C++ 使ってウェブスクレイピングしてみよう
プログラムを使って,インターネット上から必要なデータを自動収集することを,“ウェブスクレイピング"とか,単に"スクレイピング"とかといいます.
近頃は,ネット上のデータを使って,機械学習のプログラムに学習させたり,データサイエンティストが分析したりする手法が一般的になってきました.このため,そのためのデータ収集も,プログラムを使ってよく行なわれています.
一方,スクレイピングというと,一般に Python や Ruby といったスクリプト言語を使って収集することが多いかと思います.というのも,ネット上のデータは多くがウェブページを介したデータで,ウェブページはテキスト形式(HTML)で書かれているからです.Python や Ruby などと比べると,C/C++は文字列の処理が煩雑になりがちなので,スクレイピングで使われることは,あまりないかと思います.
そのような常識(?)にもかかわらず,本記事では,果敢にも C++ でスクレイピングのプログラムを書かれています.
ウェブリソースへのアクセスには,鉄板の libcurl を使い,また,HTML5 のパーサには Google の gumbo を利用しています.基本的な内容で,スクレイパの実用性はあまりありませんが,C/C++ を使ったプログラミング実習の"お題"としては,とても参考になるのではないかと思います.
できあがったプログラムを自分で拡張して,データベースと連携したり,分析するプログラムを外付けしたりしてみても,面白いかもしれませんね.
動画に現れる顔を別人の顔にすりかえる技術 DeepFace は善か悪か
飛躍的な発展を遂げている深層学習(Deep Learning)技術を使い,動画に現れる人の顔を別人の顔にすりかえる技術 DeepFace があります.
ところが,GitHub 上のこのプロジェクトページで,詐欺などの悪いことにしか使われないこの技術は開発を止めるべきだ,との issue が立ち,議論を呼んでいます.
中国ではロマンス詐欺(結婚詐欺)のことを pig-butchering plate scam (屠殺皿詐欺)と言うそうです.被害者を豚に見立てて金銭的に殺す,という意味なのだそうで,いやはや,おそろしい呼び方ですね.
それはともかく,日本ではあまり議論にならないのですが,海外では,人工知能技術の弊害や法規制について,かなり真剣な議論があちこちで起きています.引用にもある通り,実際に詐欺に使われている技術でもあるため,この技術は具体的な社会問題を引き起しています.
日本の場合,ドラえもんのイメージがあるのか,人工知能やロボットに対する認識が牧歌的で,研究者や企業,役所などが,技術者倫理や社会的な制度設計についてあまりきちんと考えていない印象があります.また,人工知能技術を取り扱っており,ユニコーンと呼ばれている某企業も,工学系の研究員こそ厚遇していますが,その社会的な影響については,あまりきちんとは考えていないようです.
人工知能に限らない話ではありますが,技術は人を幸せにも不幸にもしますよね.上記の議論は,私たち人類が技術とどう向き合うのか,考えさせられる議論だと思います.
Chromebook でフルスペックの Linux デスクトップ環境を作る方法
安価で手軽に使えることで,昨今,見直されている Chromebook ですが,これに Linux のデスクトップ環境を構築しようという企画です.Linux 環境を作るというと,元の Chrome OS の環境を潰して,新たに Linux 環境を整えるようにも見えますが,そうではありません.ここでは,Chrome OS の環境を残したまま,Linux の環境を作ります.
この点,Chromebook の Linux 環境というと Crostini の環境を思い浮べる方も多いと思います.Crostini は,Chrome OS 向けの Linux 環境で,Chrome OS 上にコンテナプロセスを作り,その上で Linux を動かす仕組みです.この方法は,Chrome OS をメインに使っている方が利用するオマケのような位置付けで,ちょっとスクリプトを書く目的のために使われています.これでも十分 Linux のツールは使えるのですが,ターミナルからコマンドラインのプログラムを使うのが原則なので,人によっては,あまり使い勝手がよくないかもしれません.
一方,今回トライしている方法では,Crostini ではなく,crouton という汎用の chroot ツールを使って,任意の Linux OS をインストールする方法を紹介しています.RAM をたった4GBしか積んでおらず,CPU も Intel Celeron N3350 と,必ずしも高級とはいえない環境ですが,レポートによると,比較的よく動くようです.
もちろん,Chrome OS に戻りたければ,その場で戻ることもできるそうです.ソフト屋さんにとって,Chrome OS だけの端末は,少し物足りないかもしれませんが,少しであっても Linux のツールを使えると,実用性が格段に上がるのではないかと思います.
2022年の C++ 開発環境の総括
昨年は TIOBE Index で C++ が上位に返り咲くなど,2022年は C++ の年とも言えるような年でした.ここ数年,Python や Rust といった新興勢力(?)に押され気味で,元気がなかった C++ だったので,少し元気を取り戻してくれたのは,よかったのではないかと思います.
さてここでは,C++ のプログラマに対するアンケートから,2022年の C++ 開発環境を総括しています.調査は2022年5月から同年6月にかけて実施され,3万人近くの開発者から回答を得たそうです.そのうち2950人は,主に使用している3つの言語のひとつとして C++ を使用しており,1396人はC言語を使用していました.
まず,新しい規格である C++17 や C++20 にどれだけ移行しているか,といった調査では,C++11 の頃よりも早いペースで移行が進んでいることが分かりました.C++98/C++03 に留まっている開発者は,16% ほどだといいます.これは,ソフトウェアの現場としては,なかなか衝撃的な結果でして,まだ移行していない現場やプログラマは,早めに移行した方がよかろうと思います.
次に,ビルドツールに関しても,CMake の利用が顕著に増加する結果となりました.msbuild や make などの利用は横ばいなので,これらが落ちているわけではありませんが,CMake もなかなか学習コストの高いツールなので,まだ使ったことのない方は,少し利用してみるといいかもしれません.
また,単体テスト環境については,GoogleTest が,デファクトスタンダードになりつつあるようです.うみのの現場では CppUnit を利用しているのですが,まだ9%程度は使われているようです.テストフレームワークは,一度採用してしまうと,なかなか変更することが難しいので,悩みどころですね.一方「テストしていない」ところもかなりあるようで,ちょっとビックリでした.
その他にも,C++ の開発環境にまつわる興味深いアンケート結果と講評があります.C++er の方は,一読しておくと参考になるかもしれません.
ここ数年の CPU における分岐予測の発展について(2017)
2017年のドキュメントですが,今週見つけたので,ここでご紹介します.
おおよそどんなプログラミング言語にも(おそらくどんな言語にも……),条件分岐を行なう文が用意されています.典型的には,if-文と呼ばれるあの文ですね.例えば「もし赤だったら止まる,青だったら進む」のように,この文を使えば,実行時の条件によってプログラムの動作を選択することができるわけです.便利ですね.
一方,この便利な条件分岐ですが,実行にあたってそれなりに CPU のコスト(サイクル数)がかかってしまいます.このため,むやみにif-文を使いすぎると,プログラムが遅くなってしまうのです.うみのは普段,画像処理や数値計算のプログラムをよく書くのですが,そのような場面では,極力条件分岐を書かないように工夫してプログラムを書いています.
条件分岐にコストがかかることは,CPU を製造するメーカとしても,性能上のボトルネックになりえます.このため,なるべく効率よく条件分岐できるように,CPU の側でも手当てがほどこされています.これが,CPU の分岐予測 (branch prediction) という機能です.
ここでは,CPU が実行される仕組みから,年を追って分岐予測の機能がどのように発展していったのか,かなり詳しく説明されています.なかなか難しい話ではありますが,一度トライして読んでみると,CPU への理解が深まるのではないかと思います.
今週はこれでおしまい
今週もみなさまお疲れさまでした.どうぞよい週末をお過ごしください.うみのとは,来週またお会いしましょう.
それではさようなら.