Project Fx 2.0

怪文書と備忘録を書きます

Yahoo!ジオシティーズのサイトをできる限りアーカイブしたい話

ピジョンホール計画に関する備考


ここからAdventCalender記事

本記事は受験生 Advent Calendar 2018 10日目の記事らしいですよ。真っ当な受験生の皆さんはこんな記事なんか読んでる暇があったら勉強してください。真っ当じゃない受験生の皆さんは受験生(その2) Advent Calendar 2018を書きましょう。
なお本記事は実はまだ未完成なので、予告なしで突然追記・修正がされるかもしれません。

初めての方はよろしくお願いします、そうでない方はいつもありがとうございます。ゆみやという人です。コレが人生初のAdvent Calendarになるとは予想してなかった。
ネタのつもりで「受験生 Advent Calendarとかないんですか」とツイートした直後、既に存在してると教えてもらった時の衝撃は言葉にできないほどデカかったですね。マジであるとは思わなかったよ!sksatさん何しとんねん!とハイになった結果、深夜テンションで参加登録ボタンをポチってしまった訳です。この適当すぎる参加経緯から私の人生の行き当たりばったりさがよくお分かりいただけるかと思います。さて、受験生と言えば怪文書怪文書と言えば受験生!!ということで、早速怪文書を投稿していきたいと思います。(前置きが長い)

今回の怪文書の主題は「Yahoo! ジオシティーズ」(Geocities Japan)です。
ホントは関数電卓について駄文を書き連ねる予定だったんですが、それは来年の受験生 Advent Calendarで書くことにします()


皆さんは「ジオシティーズ」というものをご存知でしょうか?私の周囲では知らない人が結構いてびっくりしました。 Twitter廃人の方々の中には、9月末にやたら「ジオシティーズ」という単語がTLに流れてきてたのを覚えている方もいらっしゃるかもしれないですね。

正式名称は「Yahoo! ジオシティーズ」といい、その名の通りYahoo! JAPANが運営しているもので、端的に言うと無料でホームページを公開できるサービスです。 90年代から2010年頃まで盛んだった、日本特有のホームページ文化を支えたサービスの一つでもあります。

2018年9月末、このYahoo! ジオシティーズ(以下「ジオシティーズ」と略記)が、2019年3月いっぱいで提供終了されることが発表されました。 私はジオシティーズ上で公開されているサイトをできる限り保存する計画を個人的に進めているのですが、その話を部活でしたところ「ジオシティーズが終了すると何が困るのか」についてかなり質問されたので、この怪文書をその回答としたいと思います。
また、私はこの計画を「ピジョンホール計画(Project Pigeonhole)1と名付けているので、以下でもその名前を使います。いちいち名前つけるのが厨二臭い?それっぽい名前つけるのは男のロマンなんだよツッコむな ピジョンホール計画は、ジオシティーズで公開されているホームページ(特に移転の発表がされていないもの)をできる限り保存し、(各ページの著作権はページ作成者に帰属することと削除依頼先を明記した上で)公開することを目的とした計画です。

ジオシティーズがなくなると困るの?

超絶困ります。 理由を以下に列挙します。

  1. ジオシティーズ上で公開されている特定のホームページにしかない情報が大量にある
  2. 管理人の生きた証を遺す(闘病記など)
  3. 日本のインターネット文化の一部が丸ごと消え去る恐れがある

以下、順に説明します。

1. ジオシティーズ上で公開されている特定のホームページにしかない情報が大量にある

書いてある通りです。とは言ってもイメージがしづらいと思うので、例を挙げて見てみましょう。

  • 世界飛び地領土研究会(飛地)
    ジオシティーズのサイトの中でも特に有名なページです。世界各地に存在する「飛び地」について、ディープな研究記事が大量に置かれています。
  • 文字コードリスト(ポケモン版)
    知り合いから教えてもらったURLです。内容は記事名の通りですが、このサイトには他にもポケモンのバグ解析情報が満載で、その道の人にとってはきわめて有用なページのようです。
  • ドラえも
    かつてネット上で一世を風靡した、ふたば発のWeb漫画です。現在は更新停止中で、作者が生きているのかどうかすら不明です。
  • TEAM酷道
    酷道」ブームの火付け役となったサイトです。作者はジオシティーズ終了をご存知とのことですが、移転するかはまだ未定のようです。
  • プログラミングの小部屋
    先日Qiitaでバズった「7行プログラミング」を扱ったサイトです(当該Qiita記事中にもリンクあり)。

これらのサイトはあくまでも一例で、実際にはもっと幅広いジャンルのサイトが大量に公開されてます。特に影響が大きそうなのは、古いゲームの攻略記事/バグ解析/裏技、Flash黄金期の遺産の数々、2chの過去ログまとめ、版権作品の二次創作、すでに消えたページのミラーサイトなどでしょうか。上に挙げた中だと「世界飛び地領土研究会」や「文字コードリスト(ポケモン版)」が好例ですが、その道の人にとっては超絶有益な(場合によってはなくなると困る)サイトが結構な数あるのです。みんなも自分の好きなジャンルについて扱ったジオシティーズのサイトがないか探してみ?絶対にいくつかはヒットするから。そして俺に教えてくれ、保存するから。

さて、こうしたページは長年更新が止まっているものが大量にあります。その理由は様々ですが、代表的なものは「ホームページの管理・更新が面倒なのでやめた」「飽きた」「パスワードを忘れた上メルアドも変わったのでログインできなくなってしまった」「作者が亡くなった」などですね。これらの理由で更新が止まったページは、移転がなされる可能性が非常に低い(あるいは移転不可能)です。そうなると、それらのページに載っている情報は完全に消え失せてしまう訳です(時々「インターネットアーカイブがあるから大丈夫やろ!!」みたいな意見を見かけますが、WaybackMachineだってあらゆるサイトをクローリングしているわけではないから漏れがありますし、クローリングされててもURLが分からなければそもそもアーカイブにも辿り着けません)。そういった悲劇は、何としても避けられるべきではないでしょうか。

2. 管理人の生きた証を遺す

上でも多少触れましたが、管理人が亡くなっていて更新がストップしたページもあります。分かりやすい例は「闘病記」ですね(逝去したことが家族や友人によって追記されているものも結構ある)。そうした闘病記の例を挙げてみます。

余計なお世話と言われればそれまでですが、こういった方々の生きた証が消えてしまうのは何だかなぁという感じがします。

3. 日本のインターネット文化の一部が丸ごと消え去る恐れがある

まんまです。先述したように、ジオシティーズは2010年代初頭まで続いた日本のインターネット文化を支える役割を果たしていました。そのジオシティーズが終了するということは、日本のインターネット文化史に大きな穴を空ける大事件と言っても過言ではないのです。個人的には2019年問題と呼称すべきとも思っています。後世の歴史学者のためにも...というのは流石にオーバーな表現かもですが、それくらい重大な出来事なのです。上でも軽く触れましたが、Flash黄金時代の遺産たる作品の数多くがジオシティーズに眠っていますし、版権作品のイラストや二次創作も同じです。私は当時のネット文化を直接知っている訳ではないですが、その残滓の大部分をこのまま消してしまうのは非常に勿体ないと思います。

アーカイブについて困っていること

最初は「トップページをwget --recursiveすればええだけやん!楽勝やな」と思ってたんですが、調査を進めるうちに

  • Flashに埋め込まれたリンクからでないと飛べないページがあるサイト(Flashを解析しないといけないのでwgetでは対処できない)
  • JSで読み込まれるリンクがあるサイト(これはまだどうにかできる範囲)
  • そもそもindex.htmlから辿り着けないページがあるサイト(どうしろっちゅうねん)

みたいなのが相当数あることがわかり、どうしたもんかなぁという感じになっています。

また、保存すべきサイトのURLをどうやって収集するかという大きな課題があります。 現状では、

といったものを元に収集しているのですが、正直こういった探し方では探せるURLに限界があります。URLを自動収集するようなクローラを作る技術力は私にはありませんし、万一作れたとしても機械的な収集だと数が多すぎてとても私一人の手には負えません。というわけで、この記事をご覧のあなたにお願いがあります。 あなたの知っているジオシティーズのサイトを教えてください。 どことなくWikipediaの「寄付のお願い」っぽいな

この文章を読んで「俺もやってみたいな」「手伝ってみてもいいかな」と思った人は、コメントしてもらえると嬉しいです。受験生の筆者を手伝ってくれる、そこのお前の協力待ってるぜ!!


  1. Pigeonholeという「動物の名前が入った」「辞書に載っている」「固有名詞ではない英単語」を使ったのは、ケプラー予想の証明プロジェクト「フライスペック(Flyspeck)計画」に倣ったものです。また、「書類箱」「内容やクオリティに関係なく(適当に)仕分けする」といった意味もあるようで、そういった面でも相応しい単語だと思っています。

暴走状態のHP50gのFlash ROMを再インストールした話

グラフ関数電卓HP50g』のお話です。
この電卓はトラブルが発生した場合、本来なら[ON] + [F3] で再起動をかければ直るはずなのですが、このキー操作を受け付けないタイプの暴走状態に陥ったのでここにメモっておきます。

まずは暴走した経緯から。
SDカードに保存してあったバックアップから電卓のファイル構成を数日前の状態に戻そうとしたところ、なぜかファイルマネージャがSDカードを認識してくれないというトラブルが発生。
端子が汚れてるのかな?と考えてSDカードの接続端子を軽く拭うと、今度こそ上手く認識されました。
やっぱり端子の汚れのせいか、と考えながら、SDカードからバックアップオブジェクトを戻そうとARCHIVEコマンドを実行します。すると、いきなり画面が消灯し、続いてブラウン管テレビの砂嵐のような感じで画面全体が点灯と消灯を繰り返し出してしまいました。
な、何が起こった?と激しく困惑しながら[ON] + [F3]を押してみましたが、一切反応がありません。
電池を抜き挿しすると、"Try to recover memory?"という表示と"YES/NO"という選択肢が出てきました。が、どちらを選んでみても元の砂嵐状態に逆戻り。[ON] + [F6]でセルフテストも試みましたが、やはり砂嵐画面のままで変化なし。この時は外出先だったので、これ以上の作業は諦めました。

帰宅後、「HP50g won't turn on」などのフレーズでGoogle先生にお伺いを立て、「電池を全部抜いて15分待て」「USBケーブルからの給電だけで起動するか試せ」という検索結果を得ました。が、どちらの方法でも結局解決には至らず。
さらに数十分ほど検索を重ねた結果、私もよく拝見しているサイト『高機能電卓の情報』内の、以下の記事を発見しました。

akatuki-724.blogspot.com

今回は、リセットが効かない暴走を経験しました。リセットを掛けようとON+[F3], ON+[F1]+[F6] を押しても、反応がないのです。画面の下、4/5が真っ黒くろすけになって、動きがないのですね。これはコマッタ。

あれ、この症状、俺のHP50gと似てるぞ?

Educalc.netに「電池抜きリセット」(電池を全て取り外し、15分以上放置新聞)というTipsが出ていたので、藁をもすがる思いで試したのですが、電源を入れても同様の状態です。ウーム !?

完全に俺のと同じ症状やんけ... akatukiさんはどうやって回復させたんだろう?

検索していたら、「FlashROM更新とセルフテストメニューの呼び出し」という話題が見つかって、「そうだ、コレだ」と試してみる事にしました。ON+[F3]が効かないので、電池を入れる前に「+」、「-」キーの両方を押しておき、押しながら電池を装填するという奇っ怪な技でメニューの呼び出しに成功し、セルフテストも一通り問題ない事が確認できました。ハードウェアはイカれていない様子。そこで判ったのは「SysRPLの暴走で、FlashROMが書き換わってしまった」という可能性です。

症状も似てるし、この方法なら修復できるかもしれない!
ということで、この方法を実践してみることにしました。

実際の修復手順

[+]キーと[-]キーを押した状態で、PCと繫げてあるmini-USBケーブルを挿し込み、給電を開始します(電池は全て抜いた状態でやりました。USB給電方式なら電池4本を入れる手間が掛からずに済みます)。
すると、”1. UPDATE CODE”と"2. SELFTEST"という表示のある選択画面が出現.。まずは[2]キーを押してセルフテストをし、ハードウェア面での異常はないことを確認しました。セルフテストモードに入ると先ほどの選択画面には戻れないので、再び[+]キーと[-]キーを押しながら給電を開始して戻り、Flash ROMのデータが入ったSDカードを挿入します。

Flash ROM(ver2.15)のデータは以下のサイトからダウンロードできます。

ROM 2.15 - detailed information

ダウンロードしたzipファイルの中から、"4950_215.bin"と"update.scp"という二つのファイルをSDカードにあらかじめ移しておきましょう。

選択画面で[1]キーを押し、続いて[2]キーを押すとFlash ROMのインストールが開始されます。インストール自体は5分ほどで終了します。正常に終了したら、"RESET OR ENTER"の表示に従い、[ENTER]キーを押しましょう。すると、"Try to recover memory?"という表示と"YES/NO"という選択肢が現れます。どちらかを押せば、(本体メモリの内容は全削除されますが)正常に起動するはずです。
ざっとこのような手順で、僕のHP50gは正常な状態に戻りました。

SysRPLのコードを実行していたわけでもないのに、なぜ僕のHP50gはクラッシュしたのかがどうにも解せません。不思議です。
ともあれ、同じ症状に遭遇した方はぜひ試してみて下さい。

生産終了したマイナーな電卓の情報なんざ誰も欲しがらねぇよ、という声は気にしたら負け

グラフ電卓TI-Nspireのネイティブ開発環境「Ndless SDK」を導入した話

2021-03-13追記

本記事に書かれているSDKの導入手順をDocker化しました。 本記事の情報は古いので、こちらの新しい記事をご覧になることをおすすめします。

stepney141.hatenablog.com

はじめに:『Ndless SDK』とは

この記事は、関数電卓TI-NspireのC/C++開発環境『Ndless SDK』を、Ubuntu 17.04環境上で構築する際に私が踏んだ手順をまとめたものです。

Ndlessとは、TI社のグラフ関数電卓TI-Nspireシリーズを「脱獄」させ、ARMアセンブリ言語C言語で書かれたプログラムを動かせるようにするための、サードパーティ製ソフトウェアです。
専用の開発環境(Ndless SDK)を使えば、誰でも電卓用のソフトウェアをパソコン上で開発して、Ndlessが導入されている電卓本体に転送し、電卓上でソフトウェアを実行することができます。
Ndless SDKで開発したソフトウェアをネットで公開しているユーザーも多く、科学技術計算ソフト・ゲームソフト・便利系ソフトなど、たくさんのユーザーがたくさんのソフトウェアを公開しています。

参考資料

  1. https://hackspire.org/index.php/C_and_assembly_development_introduction(開発者による導入手順の解説)
  2. https://tiplanet.org/forum/viewtopic.php?t=20686&p=223523(開発者によるWindows Subsystem for Linuxでの導入手順の解説 ※フォーラム上の書き込み)
  3. https://github.com/ndless-nspire/Ndless.git(NdlessのGitHubリポジトリ

1. 必要なパッケージを導入する

上記の参考資料2.によれば、SDKの導入に必要なパッケージは以下のコマンド入力でまとめて導入できるようです:

sudo apt-get install git build-essential binutils libgmp-dev libmpfr-dev libmpc-dev zlib1g zlib1g-dev zlib1g-dbg libboost-dev libboost-program-options-dev libboost-program-options1.58-dev libboost-program-options1.58.0 libboost1.58-dev wget texinfo libpython2.7-dev bison flex php7.0-cli

厄介なのは、参考資料1.で指定されていないパッケージも導入する必要があるということ。
パッケージがひとつでも欠けていると正しくSDKを導入できないようなので注意が必要です。

2018年1月現在では、libboost-program-options1.58-devとlibboost-program-options1.58.0はapt-get経由での導入ができなくなっています(新規バージョンは導入可能)。
1.58をわざわざwgetで落としてくるのも面倒だったため、僕は1.62をapt-getで導入しましたが、バージョンの違いによるエラーは現状発生していません。

2. 本家リポジトリをcloneする

適当なディレクトリに本家リポジトリをgit cloneして導入します。ここではホームディレクトリ(/home/username)直下に導入します。
具体的には、コマンドラインで以下を実行します:

cd ~
git clone --recursive https://github.com/ndless-nspire/Ndless.git

※--recursiveをつけ忘れないよう注意、つけないと正しく導入できません!

3. build_toolchain.shを編集する

/Ndless/ndless-sdk/toolchainにあるbuild_toolchain.shをお手元のテキストエディタで開きます。
そして、以下の通りに編集します:
・31行目のOPTIONS_GDB="--target=${TARGET} --prefix=${PREFIX} --enable-interwork --enable-multilib --disable-werror --with-python"から、末尾の--with-pythonを削除
・51行目(if ! gcc -lpython2.7 test.c -o test; then error=1; echo 'libpython2.7 (python-devel/python2.7-dev) dependency seems to be missing!'; fiの部分)を丸ごとコメントアウト

要するにPython関連の記述を消せってことですね。
編集が済んだら保存してエディタを閉じましょう。

4. build_toolchain.shを実行する

再びターミナルに戻り、編集したbuild_toolchain.shを実行します:

cd ~/Ndless/ndless-sdk/toolchain
./build_toolchain.sh

このシェルスクリプトを実行すると、ARM開発用のツールチェーンが自動でダウンロード・導入されます。
処理が終わるまで待ちましょう。
完了までそこそこ時間がかかるので(回線速度やパソコンのスペックにもよるが僕の場合は40分ほどかかりました)、ターミナル画面がすごい勢いでスクロールしていくのを眺めて待ちましょう。

必要なパッケージがちゃんと入っていて、なおかつ処理が正常に終了したら、このような出力がされます:

Done! 
Don 't forget to add' / home / username / Ndless / Ndless-sdk / toolchain / install / bin 'to your $ PATH along with / home /  username / Ndless / Ndless-sdk / toolchain /../bin.

こんな感じの表示が出た人、おめでとう!一旦ターミナルを閉じて次のステップに進みましょう。
出なかった人、頑張れ!パッケージが足りないか、build_toolchain.shの編集をしくじったか、何かしらやらかしているはずなので、前に戻ってもっかいやり直しましょう。
「それでも───俺は、間違えてなどいなかった───」というそこのあなたは、本家リポジトリにIssueを投げて開発者に直接質問することをおすすめします。

5. パスを通す

ターミナルを閉じて、build_toolchain.sh実行後の表示にある通りにPATHを通します。
具体的には、~/.bashrcの末尾に以下を追加します:

export PATH="/home/username/Ndless/ndless-sdk/toolchain/install/bin:/home/username/Ndless/ndless-sdk/bin:${PATH}"

ここで、/home/username/の部分はgit cloneした場所に合わせて変えて下さい。
これはOS側の問題だと思いますが、「/home/username/Ndlessを~/Ndlessと書いたらうまくPATHが通らなかった」という報告が上がっているので、ホームディレクトリの場合は/home/username/Ndlessとしておくのが無難そうです。 参考資料1.には~/.bash_profileに追加するようにとの指定がありますが、僕の環境では~/.bash_profileだとうまくPATHを通せませんでした(~/.bashrcに追加したら通せた)。

6. makeする

再びターミナルを開いてNdlessディレクトリ直下に移動し、makeします:

cd Ndless
make

ここまで特にしくじっているところがなければ、makeは正常に完了し、こんな感じの出力をしてきます:

(前略)
make [ 3 ]: Leaving directory '/home/username/Ndless/ndless/src/installer-4.5'
make [ 2 ]: Leaving directory '/home/username/Ndless/ndless/src'
make [ 1 ]: Leaving directory '/home/username/Ndless/ndless'

PATHがちゃんと通っていないと正常にmakeが完了しません。

7. 動作確認

1.〜6.のステップが済んだら、コマンドラインnspire-gccと入力してみて下さい。
以下のように出力されたらSDK導入は完了です!:

arm-none-eabi-gcc: fatal error : no input files 
compilation terminated.

ここまで完了した皆様、お疲れ様でした!

8. 付属のテスト用コードをコンパイルする(おまけ)

【そのうち書きます】

はじめに:投稿テストを兼ねて

こんにちは、stepney141という者です。「ゆみや」という名前も一部で使ってます。

関数電卓を中心としたコンピュータ関連の話題など、僕の興味のあることについて、備忘録的な感じでちまちまと書いていきます。

ノリで記事を書いていくつもりなので、更新頻度は間違いなく一定しません。おそらく低めになると思います。

どうぞよろしくお願いいたします。