Google Readerのスターを一括で削除する方法

Reederが単独でRSSフィードを管理する機能を用意したので、Google Readerからのインポートを何度か試みたのだが、何度やっても途中でReederが落ちてしまう、という状態になっていた。いつも “Loading Starred Items” の途中で落ちてしまうので、Google Readerからスター付き記事のリストを取得しようとしている辺りで落ちているらしい。

そういえば、Google Readerでのスターを一時的なマーク代わりに使っていた頃があって、その影響もあって、スター付き記事の数が非常に多かったような記憶がある。20000は軽く越えていたような…

もっとも、スター付き記事を後で参照した覚えはほとんどない。というわけで、スターのインポートをあきらめ、Google Reader上でスターを一括で削除する方法がないか、検討し始めた。Google Readerの標準機能にはないようなので、何か方法がないかと検索してみると、ドンピシャのページがあった。

Jon Gallant: How unstar all Google Reader starred items

要するに、Google Reader上でスターを外していく作業をJavascriptで自動的にやらせよう、という方法である。手順は次のとおり。

  1. Google Readerをブラウザで立ち上げ、「スター付きアイテム」をクリック。
  2. スクロールを繰り返して、すべてのスター付きアイテムを表示させる。(というか、ブラウザのDOMに取り込む)
  3. 以下のJavascriptを実行。
var x = document.getElementsByClassName('entry-icons'); for(var i=0;i<x.length;i++)x[i].firstChild.click();

この人の作ったChrome機能拡張もあった。やってることは同じようである。

Chrome Web Store - Unstar All Google Reader™ Starred Items

この方法でスターを一括で削除した結果、Reederへのインポートが成功した。やれやれ。

以下、実際にやってみた経験からの注意点を書いてみる。

まず、手順2のスクロールだが、Google Readerに直接作用する機能拡張をブラウザに入れていると、このスクロールが非常に遅くなる。一回のスクロールで遅くなるのはごく僅かでも、スターの一括削除をしようとする(=スターが非常にたくさんある)状況だと、スクロールが度重なるので、「塵も積もれば山となる」という次第である。なので、この手の機能拡張はあらかじめ無効にしておく方がよい。私の場合、BufferPocket(特にBufferのほう)が該当した。

もう一つ。スター付きアイテムの数が多くなればなるほど、手順3を実行するときにDOMが非常に大きくなる。私の場合、20000以上のアイテムを全部取り込んだ状態で手順3を実行すると、ブラウザが反応しなくなってしまった。どうやらJavascriptは動いていたようなので、単にマウス操作に反応しなくなっただけのようだが、上のJavascriptは単純なことしかしていないので、手順が進んでいるのかハングアップしているのか、ブラウザの反応だけでは分からない。あまり精神衛生上よくないので、取り込むアイテム数を小分けにして、手順2と手順3を繰り返した。Google ReaderがAjaxをバリバリに使ったアプリなので、表示が乱れたりすることもあったが、Google Readerを立ち上げ直せば正常に戻ったので、単に表示だけの問題だと思われる。

今期の講義振り返り: Standard MLの講義、今年度で終了

半期ごと恒例の、その期の講義振り返り投稿です。今年はちょうど情報系のカリキュラム大幅改訂と重なっていて、担当講義がほとんど入れ替わるということになりました。旧カリキュラムの講義は今年度で終わりになる一方、新カリキュラムの講義が一部始まる、という感じです。

そんなわけで、今の大学に移ってきて16年くらい続けてきた、Standard MLを題材にした講義も今年度で終わりとなりました。まあ、実際は、今年度の受講生は過年度生だけで3人しかおらず、しかも全員が途中で出席しなくなってしまったので、実質は昨年度で終わりとなっていたわけですが。

この講義、白紙の状態から講義内容を考えた初めての講義でした。普通、講義というのは(その学科のカリキュラム編成から)ある程度題材が固定されていて、その範囲内で内容を考える、といった場合が多いのですが、この講義は、「プログラミング言語を題材にする」としか決まっておらず、選択の幅が極めて広いところから講義内容を考えることができたというわけです。

まあ、Standard MLを選択したのは、実は安直な理由でした。自分が大学生の頃から憧れの言語だったこと、そしてUllmanの書いた良い教科書があったこと。Ullmanの本は、型推論の理論などの説明もなく、どちらかというとリストや再帰といったプログラミングの基本的な知識、そして高階関数のような少し発展的な知識を実践的に述べる、というスタンスから書かれていて、プログラミング言語の専門書としては全然物足りないのでしょうが、私の大学でプログラミング言語を教える、という意味では、とても手頃なものでした。これに沿って教えていくうちに、「Standard MLを題材にして再帰や高階関数を教える」という、講義の骨格ができあがっていきました。

16年やってみて、実際のところどのくらい教育的な効果があったのか、というのは、自分ではよくわかりません。学生さんも様々ですから、Standard MLと相性がいいのも悪いのもいたように思いますし。

ただ、教える側から言えるのは、毎年楽しく講義ができたなあ、と思います。講義をやっていると、大抵どれでも、途中で「教えるのがしんどい」と思ってしまう回が何処かにあるものなんですけど、この講義はそれがありませんでした。講義の内容は程よく理論的になっていたほうが教えやすい、ということも、この講義を通して学んだことです。大体、そもそもの話として、これをやるまでは、自分自身が再帰や高階関数、型についてよく分かってなかった。教えているうちに、自分自身、非常に理解が深まったなあ、というのはここだけの話。

教員として、良い体験ができたなあ、というのが、正直な感想です。

この講義をやるうちに、いわゆる関数型言語が道具として面白く感じられるようになって、できればHaskellやOCamlあたりを研究の道具として使ってみたいなあ、と思ったりもするのですが、うちの大学の場合、大多数の学生にとっては少々高級すぎる道具(プログラミング言語)かなあ、という気がして、なかなか踏み出せないんですよねえ…まあでも、どこかで実践的に使ってみたいな。