湯田ダム貯水池遺構見学会

湯田ダム Advent Calendar 2024 2日目の記事です。

今日は湯田ダム Advent Calendar 2024作成のきっかけとなった話をしようと思います。

今年は湯田ダムが竣工して60周年となります。そして湯田ダムの湖畔を走る北上線は全線開通100周年となる年でもあります。

湯田ダムは10年に一度メンテナンス工事が行われており、今年がその年に当たります。どうやらメンテナンス工事の間、湯田ダムで定めている最低水位よりも2.5メール低い水位となり、かつてダムの場所にあった集落の遺構が現れることになります。

そして、この水位低下に合わせ、貯水池遺構見学会というイベントが開催されるとのこと。

ダムに沈んだ集落…これは夏目友人帳における「ダム底の燕」の世界観…これはぜひ見に行きたい!ということで、さっそく申し込み、無事に参加できる運びとなったのでした。 (が、参加者の方々はダムガチ勢、遺構ガチ勢であったことを後々知ることになるのです…)

湯田ダムAdvent Calendarを始めてみます

湯田ダム Advent Calendar 2024 1日目の記事です。

今日はこの湯田ダム Advent Calendar 2024の概要というか、書いてゆく内容を紹介しようと思います。

岩手県西和賀町というところに、湯田ダムというダムがあります。錦秋湖とも呼ばれ、秋頃は湖畔を走る列車から美しい紅葉を眺めることができます。

その湯田ダムの場所にはかつて集落があり、水底には当時を偲ばせる遺構が残っています。そんな湯田ダムにおいて、11月9に「貯水池遺構見学会」というイベントが開催されました。

この一連のAdovent Calendarを通じて、貯水池遺構見学会で撮ってきた数多くの遺構の写真から往事に思いを馳せてみようと思います。

Webブラウザのブックマークレット機能でニュース記事のテキストを抽出してみる

岩手県立大学とか、岩手の人たち Advent Calendar 2022 23日目の記事です。今日はニュース記事をテキストとして抽出する話をしようと思います。

ニュース記事のブックマーク

ネット上で見かけて気になったり、後から参照しそうな記事をブックマークしておくことは良くあるかと思います。しかし、記事によっては掲載期間が過ぎると閲覧できなくなるものもあり、時間が経ってからブックマークを開くと「記事が見つかりません」という表示がされて残念な気持ちになることがあります。

その都度、Webページを保存したりテキストで手元にコピペしておけばよいのですが、数が多くなるとこれも面倒です…。Webスクレイピングでテキスト抽出、という方法もありますが、昨今のニュース記事のWebサイトはJavaScriptで表示制御されていることも多く、いつでも適用できる方法ではありません。

Webブラウザブックマークレット機能

ところで、Webブラウザでは「ブックマークレット」という機能があり、ブックマークから小さなJavaScriptプログラムを動かすことが可能です。この機能の嬉しい(面白い?)点として、ブックマークレットを走らせると、ユーザが現在閲覧しているWebサイトでJavaScriptを動かせるというものがあります。これを応用して、ニュース記事のWebサイトから記事のテキストを抽出することもできそうです。

ブックマークレットの作り方

ブックマークレットの作り方は簡単で、ブックマーク作成時にURLの部分に javascript:<任意のJavaScript> を設定するだけです。エディタ等でスクリプトを作成しておいたコードをコピペするのがお手軽な作成方法です。

ニュース記事からテキストを抽出するブックマークレットスクリプト

今回は例として、Yahoo! Japan ニュースからニュース記事をテキストで抽出するサンプルを作成してみます。

サンプルコードは以下になります。ポイントとしては、 window.location で現在閲覧しているURLを取得し、それが対象のURLかどうかを判定することで、関係のないWebページでこのスクリプトの処理が走ってしまうことを防止しています。それ以外は単にWebページ内のHTML構造を document.getElement*() 系の関数でアクセスし、タグ内のテキストを取得しているだけです。

/* Yahooニュース(https://news.yahoo.co.jp/)の記事をテキスト形式で取得するブックマークレットです */
javascript:(function() {
    /* 現在のWebページのURLを取得する */
    let url = window.decodeURI(window.location.toString());

    /* 現在のWebページがYahoo!ニュースの記事ページかどうか判定する */
    if (url.match(/^https:\/\/news.yahoo.co.jp\/articles\//) != null) {
        /* Yahoo!ニュースの記事ページなら、記事の内容をHTMLタグから抜き出す
         * HTMLタグについているclass名を用いてタグを絞り込む */
        let title = document.getElementsByClassName('sc-gpHHfC')[0].innerText;
        let date_time = document.getElementsByClassName('sc-kQsIoO')[0].innerText;
        let body = document.getElementsByClassName('sc-jtggT');
        let chapter = document.getElementsByClassName('sc-gmeYpB');

        /* 抜き出したニュース記事をテキスト形式に整形する */
        let text = `${title}\n`;
        text += `${date_time}\n\n`;
        for (let i in body) {
            if (body[i].innerText == undefined) {
                continue;
            }
            if (i > 0 && i < chapter.length) {
                /* 記事の小見出しを含む場合は「■」で小見出し部分を強調する */
                text += `■ ${chapter[i-1].innerText}\n${body[i].innerText}\n`
            } else {
                /* 記事本文のみの場合 */
                text += `${body[i].innerText}\n\n`
            }
        }
        alert(text);
  }
})()

実際にこのブックマークレットを動かしてみると、以下のようにニュース記事のテキストが抽出できます。このテキストをHTTP POSTで受け取って保存するようなWebAPIを作成しておくとさらに便利でしょう。 (ただし、あくまでも個人用途での利用のみに留めるのが良いかと思います)

まとめ

ブックマークレット機能を利用して、ニュース記事のテキストを抽出する例を紹介しました。Webページの情報を抽出するというケースにおいては、Webスクレイピングがお手軽ですが、JavaScriptで表示内容が制御されているような場合は、そのWebサイトのみで動作する形のブックマークレットを作成し、JavaScriptでHTML構造にアクセスするのが手段としては適切ということもあったりします。

Webコミックが更新されたかどうかを自動的にチェックしてみる

岩手県立大学とか、岩手の人たち Advent Calendar 2022 16日目の記事です。今日はWebコミックの更新確認をお手軽に行う方法を紹介しようと思います。

15日目の記事ではWebコミックの更新日を確認する方法を紹介しましたが、Webサイトによっては、そもそも次回更新日が記載されていない場合もあります。今回は、(私は単行本で読んでいるのですが)「ワカコ酒(ゼノン編集部)」を例に更新確認を行う方法を紹介しようと思います。

Webページの構造を把握する

さっそくWebページの構造を把握してみます。コミックぜにょんのWebサイトを見ると、第1話と最新話へのリンクがあり、最新話のURLは都度変わるという構成になっています。

このような場合は、「変わらないもの」に着目することで欲しいデータを引っかけるためのキーワード代わりにできます。今回の例では、「第1話」のURLは変わらないでしょうから、このURLをキーワードにできそうです。

URLはHTMLの a タグに記載され、 <a href="<URL>">ワカコ酒</a> のような記述になるため、URLとタイトルでgrepすると最新話のURLが取得できます。

$ curl -s  https://comic-zenon.com/series/zenyon | grep -A3 'https://comic-zenon.com/episode/10834108156688950516.*ワカコ酒'
    <h4 class="item-series-title"><a href="https://comic-zenon.com/episode/10834108156688950516">ワカコ酒</a></h4>
    <p class="item-series-author">新久千映</p>
    <div class="panel-tag zenyon">      <p>グルメ</p>      <p>おひとり様</p>      <p>TVドラマ化</p>    </div>
    <div class="panel-button">      <a href="https://comic-zenon.com/episode/10834108156688950516">1話へ</a>      <a href="https://comic-zenon.com/episode/316190247005800487">最新話へ</a>    </div>

こんな感じですね。この処理を一日一回走らせる等しておき、取得・保存しておいたURLと比較することで、URLが異なっていたら最新話が更新された、と判断できます。

$ curl -s  https://comic-zenon.com/series/zenyon \
    | grep -A3 'https://comic-zenon.com/episode/10834108156688950516.*ワカコ酒' \
    | tail -n1 \
    | sed \
        -e "s/\">最新話.*$//" \
        -e "s/^.*http/http/"
https://comic-zenon.com/episode/316190247005800487

まとめ

Webコミックの更新確認を行う方法の一つとして、最新話のURLを用いる方法を紹介しました。Webスクレイピングでデータ取得して以前のデータと比較するという、地味な方法ですが、チェックしたいWebコミックが多くなってくるとこのシンプルな実現方法の楽さが嬉しく思えてくるかと思います。

Webコミックの次回更新日をWebスクレイピングで取得してみる

岩手県立大学とか、岩手の人たち Advent Calendar 2022 15日目の記事です。今日はWebで公開されているマンガの次回更新日をWebスクレイピングで取得する話をしようと思います。

Webコミックの次回更新日

私が読んでいるWebコミックの一つに「邪神ちゃんドロップキック(COMICメテオ連載)」があります。Webでマンガが読めるのはありがたいのですが、次にマンガが更新される日付を見落としがちだったりします…。こまめにWebサイトを確認すれば良いのですが、確認しに行ってまだ更新されていないとちょっと残念な気持ちになるので、自動的に次回の更新日を把握しておきたいものです。Webサイト上には「次回は○月×日更新」といった記述があるため、この情報を取得できればよさそうです。

Webスクレイピングで次回更新日を取得してみる

さっそく「邪神ちゃんドロップキック」のWebサイトのHTML構造を見てみます。更新日の表示は「次回は○月×日更新!」という形式になっているので、単純に「次回は」というキーワードでgrepしてみます。前後のHTMLを見ると、 <div class="work_next_update_txt"> タグの一行下に次回更新日が記載されています。

$ curl -s https://comic-meteor.jp/jyashin/ | grep -B4 -A4 次回は

    <div class="work_next_update">
                <!-- 最新の投稿を表示 -->
        <div class="work_next_update_txt">
            次回は1228日更新! 単行本20巻&ムック好評発売中! クラウドファンディング大反響実施中!        </div>
                    <div class="work_next_update_txt">
                            </div>
                <!-- 投稿記事数の判定終了 -->
        <!--次回は4月更新予定! ☆TVアニメ化決定ですの!☆特集ページもチェック!☆最新情報は公式twitter(@jashincyan)にて。-->
    </div><!-- work_next_update end -->

    <script src="https://comic-meteor.jp/jyashin/wp-content/themes/comic-meteor-child/indexPage.js"></script>
            <div class="work_episode">

というワケで、以下のようにすると無事に次回更新日が取得できました。

$ curl -s https://comic-meteor.jp/jyashin/ \
    | grep -A1 '^        <div class="work_next_update_txt">' \
    | tail -n1 \
    | sed \
        -e "s/更新.*//" \
        -e "s/^.*次回は//"
1228

まとめ

Webコミックの次回更新日を取得する方法を紹介しました。小技チックな手法ですが、HTMLの構造次第では今回の例のように、簡単な文字列置換のみで目的が達成できたりします。 (なので、簡単なシェルコマンドを覚えておくのは意外と有用だったりします)

点字翻訳アプリのサンプルを作ってみました

岩手県立大学とか、岩手の人たち Advent Calendar 2021 3日目の記事です。 今日はシニアプログラミングもくもく会JavaScriptを使った簡単なアプリ作成を行った話をしようと思います。

シニアプログラミングもくもく会

シニアプログラミングもくもく会は、シニア(高齢者)の方のプログラミング学習を支援するコミュニティーで月イチの頻度でもくもく会が開催されています。もくもく会では、プログラミング言語に応じて複数の部屋(現在はZoomを使っており、ブレイクアウトルームに分かれてもくもく会する感じになっています)が用意されています。

シニアの方だけでなく、一般の方も参加可能であるため、私も少し前から参加させてもらっていて、Glideというノンプログラミングツールのもくもく部屋を開催していました。

ただ、参加者の方が作ってみたいアプリをヒアリングしてみると、Glideのユースケースにマッチするものとそうでないものがあり、まずはいくつかの小さなアプリを題材としたプログラミングが良いのではないかと思うようになってきました。 (個人的にはちょっとした面倒ごとを解消するようなアプリだとプログラミング学習のモチベーションが上がるような気がしています)

というワケで、前々回くらいからJavaScript部屋を開催させてもらっており、今回はそこで作成した簡単なアプリの紹介をしてみます。

点字翻訳アプリ

少し前の話ですが、日本盲導犬協会の方が以下のようなツイートをしていました。どうやら11月1日は日本点字制定記念日のようです。

このツイートに点字の一覧表が添付されており、「これを使用すれば点字を読み解けるのでは…!」と閃いたワケです。機能的にも比較的小さなプログラムで実現できそうであり、さっそくJavaScript部屋でのアプリの題材にしてみました。

アプリの構成

JavaScript自体はWebブラウザさえあれば試すことができますが、実際に作成したプログラムの共有はもう一工夫必要です。JavaScript部屋ではcodepen.ioでプログラムを共有することにしました。

今回作成した点字翻訳アプリは以下のURLで試すことができます。

See the Pen 点字翻訳アプリ by furandon_pig (@furandon_pig) on CodePen.

サンプルということもあり、ア~オまでの点字のみの翻訳となっていますが、基本的な機能は実装済みです。 点字の入力をどうするか、という点がネックでしたが、点字の入力欄に見立てた2列3行の入力欄をクリックすることで点字の凹凸(「‐」と「●」)がトグルするようなユーザインタフェースにしてみました。

点字が入力される度にデータとして持っている点字リストと比較し、一致する文字があればそれを表示する、という動作にしてみました。

HTMLとJavaScriptを合わせても60行ちょっとなので、だいぶコンパクトなプログラムになっています。 (あとは点字のデータを一通りそろえれば十分に実用的なアプリになります)

できるだけシンプルな構成にする

この点字翻訳アプリですが、 document.getElementById() によるDOM操作等、あえて古めかしい書き方をしている部分もあります。最新のJavaScriptの機能やフレームワークも良いのですが、プログラミンを学び始める際には逆に憶えることが増えてしまう場合もあります。

そのため、「こうすればこのような動作になる」という具体的な動作イメージを掴んでもらいやすくするため、ちょっと古めかしい書き方であってもアプリの振る舞いについて流れが追いやすいようなサンプルにしています。

まとめ

簡単ではありますが、シニアプログラミングもくもく会で作成した点字翻訳アプリとJavaScript部屋の紹介をしてみました。

codepen.ioは初めて使ってみたのですがなかなか便利です。特に小さなアプリの作成とプログラムの共有がJavaScript部屋でのユースケースにうまくマッチしています。 他にも小さなアプリの題材を見つけてプログラムのサンプルを増やして行きたいところです。

クマ研講演会~みんなの知らない野生動物の世界~(2019)に参加してきました

岩手大学 Advent Calendar 2021 2日目の記事です。今日は以前に岩手大学で開催された「クマ研講演会~みんなの知らない野生動物の世界~」という公開講座に参加した時の話をしようと思います。

クマ研講演会

少し前の2019年11月の話になりますが、岩手大学で「クマ研講演会~みんなの知らない野生動物の世界~」という公開講座が開催されました。面白そうな講演会であったため、ふらりと参加してみました。

クマ研講演会に向かう

クマ研講演会は2019年11月16日(土)の13:00開始であったため、まずはお昼ご飯をすませてから会場に向かうことにしました。 お昼は中津川の近くにある中河(なかがわ)に立ち寄ってみました。メニューはラーメンだけという昔ながらの硬派(?)なお店でです。 (残念ながら、当時の段階で店内での撮影はNGになっていました…)

f:id:furandon_pig:20211202234059j:plain f:id:furandon_pig:20211202234104j:plain

あとはそこから会場の岩手大学まで散歩を兼ねて歩きます。運の良いことに中河から通りに出た道を道なりに歩いてゆくと岩手大学に辿り着けるようです。

f:id:furandon_pig:20211202234053j:plain

岩手大学に着いた後は講演会の案内ポスターを頼りに会場に向かいます。

f:id:furandon_pig:20211202234045j:plain f:id:furandon_pig:20211202234028j:plain

岩手の森のけもの達~その生息の実態は今~

公開講座の内容はいくつかあったのですが、今回のその中の「岩手の森のけもの達~その生息の実態は今~」の紹介をしようと思います。

岩手県に生息する野生動物(哺乳類)は45種類あり、以外(?)なことに一番多い種類はコウモリ目とのこと。 (てっきりクマかシカ類が多いのかなと思っていました…) そして参考までに、鹿児島県の場合は39種類とのこと。

野生動物 種類 備考
モグラ・トガリネズミ目 7種
ウサギ目 1種
ネズミ目 8種
コウモリ目 17種 13種がレッドデータ種になっている
サル目 1種
食肉目 8種
ウシ目 3種

また、市街地でよく見かけるのは「アブラコウモリ」という話でした。

コウモリの話

コウモリは大食漢?

コウモリ目が一番多いという点から、コウモリの習性について解説されていました。

コウモリは大食漢であるらしく、例えばユビナガコウモリが住処の洞窟からエサを採りに出かける前(出洞前)の体重は13gほどでありながら、帰って来た時(帰洞後)は16gになっていたり、ドーベンコウモリの例では7g~12gの変動幅で、最大8gのユスリカ捕食例もあるのだとか。この大食漢っぷりは、計算上だと体重45gのヤマコウモリが400匹分のタマバエ(20g)を捕食できることになり、ヤマコウモリが50匹いたら、一晩に20,000匹のタマバエを捕食できるという計算になります。

これはコウモリ目が昆虫類の大量発生抑制に多大な貢献を果たしているという話でもあり、健全な農林業への大きな役割を果たしているとも言えます。 日本では試算されていないとのことですが、アメリカの試算では農業被害軽減効果は最低でも年37億ドル(4000億円)にもなるとのこと。

コウモリの保全に関する課題

ところが、日本においてはコウモリの保全に関する課題は山積みとのことで、森林性コウモリの場合は繁殖・休息場所の減少が挙げられます。これについては、例えば乗鞍高原にバットハウスがあったりします。 また、トンネルの改修等で天井をツルツルにしてしまうとコウモリがつかまれなくなってしまうため、「コウモリピット」を設置して止まりやすいようにしたりしたり、メッシュタイプのコウモリピットを用意したりするとのこと。 そして、欧米はコウモリ保全の先進国とのことで、イギリスではコウモリが屋根裏に入りやすいように出入り可能な瓦が販売されているのだとか。

加えて、クリーンな発電方法として風力発電が挙げられますが、バードストライクと同じく、バットストライクも風力発電の進展と共にコウモリの保全に対して深刻な影響を与える可能性が考えられるというお話でした。 (全てにおいてベストな解決策というものは存在しないという話ですね…)

岩手県で近年問題になっている動物たち

ハクビシンの話

コウモリの話の次は、岩手県で近年問題になっている動物たちの解説が行われました。 ツキノワグマによる被害はニュースでも耳にするのですが、それ以外の動物による被害はあまりニュースにはなりませんね…。

まずはハクビシンの話がありました。どうやらハクビシンは甘いものが大好きで何でも食べ、しかも昆虫、ニワトリ、カエルなど何でも食べる悪食(?)とのこと。はては里芋の芋がらまで食べるらしく、食べ物の半分は人間由来のエサになっているとのこと。 さらに、人間由来の資材、廃屋などがハクビシンの格好のねぐらになっており、例えば古い神社のお社などがねぐらになっているというお話でした。

ツキノワグマの話

ツキノワグマの話もあり、今年(当時は2019年)も出没・駆除が頻発しているという話でした。 岩手県は広いというか、東西に大きな山脈が分かれており、同じ岩手県でも、北上高地と奥羽山地でツキノワグマに遺伝的な差があり、北上高知(北上山地)ではアルビノのクマの発見率が多いとのこと。 また、クマは蛇が嫌いらしく、どうやらこれは本能的な習性ではないかとの解説がなされていました。 ニュースを見ていると、頻度の差はあれ定期的にクマのニュースが出ているという印象はあり、特にブナが不作の時にはクマが多く出てくる気がしますが、実際のところ、東北でクマの駆除が多いのは夏(7~10月)であり、この季節はブナの実はなっていないため、別の要因ではないかとの話でした。 (講演者の方が「これは別の機会に…」と話されていたので、次回のクマ講演会が待たれるところです) そして、クマに縄張りはあるか?という話があり、クマの行動圏は重複しているため、一頭駆除しても代わりがたくさんいる、なので駆除したから即安心、という話でもないとのことでした。

昨今の農業就業者数の減少により、畑が廃棄されるケースが増えており、廃棄された畑はすぐ荒れてしまいバッファゾーン(※)ではなくなってしまうので、クマが通れるようになってしまう。 ※:農道等で道ができていると、クマは緑が無いところを警戒して道を横切って超えてこない、という話でした。

結局のところ、クマの駆除だけでは被害はなくすことはできず、森の整備、そしてクマを里に誘因する原因の除去など「総合的な施策」が欠かせないという話で解説が締めくくられていました。

まとめ

「クマ研講演会~みんなの知らない野生動物の世界~」の公開講座メモをまとめてみました。2019年に開催された際にメモを取っていたのですが、だいぶ長らく手元にしまい込んでいたため、今回改めてメモを整理して公開してみました。 他にも面白い話がいろいろとありましたので、またメモが発掘されたら公開するとともに、次回のクマ研講演会の開催を心待ちにしたいと思います。