目次
2025-06-29 uniqlo のシャツ
2025-06-24 wix velo
2025-06-18 続・町内会ホームページ
2025-06-09 【訃報】ビル・アトキンソン
2025-06-07 マリオカートワールド
2025-06-06 Switch2
2025-06-06 コピー機納入
今月の日記
家族の買い物に付き合って Uniqlo に行ったら、イカレたデザインのシャツを売っていたので買ってきた。
Peace for All というキャンペーンで、このテーマでいろいろな人・企業にデザインしてもらったシャツを売っているようだ。
僕が買ってきたのは、Akamai という会社のコラボシャツ。店内ポスターではあいうえお順にデザインが並んでいたので、「アカマイ」は先頭だった。こんなイカレたデザインが先頭に描かれているとは。
Uniqlo も良く Akamai にコラボ依頼したな…と思ったら、後で調べたところこれは第2弾だそうだ。
しかし、第1弾は自分としては惹かれるデザインではなかったようなので、こちらでよい。
さて、この Akamai という会社、多くの人は知らないだろう。
そして、僕のようにネット関連の技術者であれば、知らなくてはならない会社だ。
Akamai は、ネットを裏で支える技術企業だ。
消費者にネット接続を提供するプロバイダも、コンテンツを提供する企業側も、そしてコンテンツを閲覧する利用者側も、全員が儲かって幸せになる仕組みを作り上げている。そしてもちろん、そのシステムを提供する Akamai も大儲けしている大企業だ。
これを、25年前の時点で、誰もがすぐに利用できる既存の仕組みの巧妙な組み合わせで作り上げた、ということが素晴らしい。
この仕組みが非常に面白いのだが…巧妙なので、説明すると非常に長くなる。一度書いてみたのだが、話の腰が折れすぎるので、今回は割愛することにした。
(いい説明があればリンクを…と思ったが、これまた技術的で巧妙なので、ちゃんと説明しているページを見つけられなかった。この話、面白いから機会があれば説明したい。)
さて、そんな技術会社の作ったシャツは、技術オタクが泣いて喜ぶようなデザインになっている。
写真を拡大すればわかるが、暗号のような訳の分からない文字列だ。
すでに解読した blog 等もたくさんあるが、暗号部分の解読どまりで、全体の構造を解説しているページは見つけられなかった。
ちょっと解説しておこう。
書かれている内容は以下のようになる。
(改行位置などは T シャツデザインと違うが「正しい」位置にいれてある。そのため、このままコピペすれば実行可能ファイルになる)
#!/bin/bash
eval "$(base64 -d <<< 'IyEvYmluL2Jhc2gKCiMgQ29uZ3JhdHVsYXRpb25zISBZb3UgZm91bmQgdGhlIGVhc3RlciBlZ2chIOKdpO+4jwojIOOBiuOCgeOBp+OBqOOBhuOBlOOBluOBhOOBvuOBme+8gemaoOOBleOCjOOBn+OCteODl+ODqeOCpOOCuuOCkuimi+OBpOOBkeOBvuOBl+OBn++8geKdpO+4jwoKIyBEZWZpbmUgdGhlIHRleHQgdG8gYW5pbWF0ZQp0ZXh0PSLimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlUEVBQ0XimaVGT1LimaVBTEzimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlIgoKIyBHZXQgdGVybWluYWwgZGltZW5zaW9ucwpjb2xzPSQodHB1dCBjb2xzKQpsaW5lcz0kKHRwdXQgbGluZXMpCgojIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0CnRleHRfbGVuZ3RoPSR7I3RleHR9CgojIEhpZGUgdGhlIGN1cnNvcgp0cHV0IGNpdmlzCgojIFRyYXAgQ1RSTCtDIHRvIHNob3cgdGhlIGN1cnNvciBiZWZvcmUgZXhpdGluZwp0cmFwICJ0cHV0IGNub3JtOyBleGl0IiBTSUdJTlQKCiMgU2V0IGZyZXF1ZW5jeSBzY2FsaW5nIGZhY3RvcgpmcmVxPTAuMgoKIyBJbmZpbml0ZSBsb29wIGZvciBjb250aW51b3VzIGFuaW1hdGlvbgpmb3IgKCggdD0wOyA7IHQrPTEgKSk7IGRvCiAgICAjIEV4dHJhY3Qgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUKICAgIGNoYXI9IiR7dGV4dDp0ICUgdGV4dF9sZW5ndGg6MX0iCiAgICAKICAgICMgQ2FsY3VsYXRlIHRoZSBhbmdsZSBpbiByYWRpYW5zCiAgICBhbmdsZT0kKGVjaG8gIigkdCkgKiAkZnJlcSIgfCBiYyAtbCkKCiAgICAjIENhbGN1bGF0ZSB0aGUgc2luZSBvZiB0aGUgYW5nbGUKICAgIHNpbmVfdmFsdWU9JChlY2hvICJzKCRhbmdsZSkiIHwgYmMgLWwpCgogICAgIyBDYWxjdWxhdGUgeCBwb3NpdGlvbiB1c2luZyB0aGUgc2luZSB2YWx1ZQogICAgeD0kKGVjaG8gIigkY29scyAvIDIpICsgKCRjb2xzIC8gNCkgKiAkc2luZV92YWx1ZSIgfCBiYyAtbCkKICAgIHg9JChwcmludGYgIiUuMGYiICIkeCIpCgogICAgIyBFbnN1cmUgeCBpcyB3aXRoaW4gdGVybWluYWwgYm91bmRzCiAgICBpZiAoKCB4IDwgMCApKTsgdGhlbiB4PTA7IGZpCiAgICBpZiAoKCB4ID49IGNvbHMgKSk7IHRoZW4geD0kKChjb2xzIC0gMSkpOyBmaQoKICAgICMgQ2FsY3VsYXRlIGNvbG9yIGdyYWRpZW50IGJldHdlZW4gMTIgKGN5YW4pIGFuZCAyMDggKG9yYW5nZSkKICAgIGNvbG9yX3N0YXJ0PTEyCiAgICBjb2xvcl9lbmQ9MjA4CiAgICBjb2xvcl9yYW5nZT0kKChjb2xvcl9lbmQgLSBjb2xvcl9zdGFydCkpCiAgICBjb2xvcj0kKChjb2xvcl9zdGFydCArIChjb2xvcl9yYW5nZSAqIHQgLyBsaW5lcykgJSBjb2xvcl9yYW5nZSkpCgogICAgIyBQcmludCB0aGUgY2hhcmFjdGVyIHdpdGggMjU2LWNvbG9yIHN1cHBvcnQKICAgIGVjaG8gLW5lICJcMDMzWzM4OzU7JHtjb2xvcn1tIiQodHB1dCBjdXAgJHQgJHgpIiRjaGFyXDAzM1swbSIKCiAgICAjIExpbmUgZmVlZCB0byBtb3ZlIGRvd253YXJkCiAgICBlY2hvICIiCgpkb25lCgo= ')"
PEACE FOR ALL
これは UNIX のシェルスクリプトだ。ファイルに chmod +x で実行属性を与えれば実行できる。
先頭行は、bash を使用して実行できる、という、OS に対する指示だ。
2行目が長いのだが、eval している。これは、bash でその次の文字列を評価せよ、という命令だ。
eval の対象となる部分は、 " " で括っている。
さて、「その次」だが、謎の文字列に見える。でも、評価するのはこの文字列ではない。
$( で始まっているが、これは「外部コマンドを実行して、その結果を返せ」という指示だ。
(2行目の最後付近に、対応する閉じ括弧がある)
評価対象は、この外部コマンドが返した結果である。
そして、外部コマンドが base64 -d だ。これは、base64 形式でエンコードされた文字列を、デコードせよ、という指示。
謎の文字列は、base64 エンコードされたもので、後で詳細を書く。
3行目の PEACE FOR ALL は、命令ではない。キャンペーンに合わせて書かれているメッセージ。
しかし、ここに命令ではないものが入っていても大丈夫なようになっている。こちらも詳細は後で。
さて、base64 部分をデコードしたもの。
#!/bin/bash
# Congratulations! You found the easter egg! ❤️
# おめでとうございます!隠されたサプライズを見つけました!❤️
# Define the text to animate
text="♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥"
# Get terminal dimensions
cols=$(tput cols)
lines=$(tput lines)
# Calculate the length of the text
text_length=${#text}
# Hide the cursor
tput civis
# Trap CTRL+C to show the cursor before exiting
trap "tput cnorm; exit" SIGINT
# Set frequency scaling factor
freq=0.2
# Infinite loop for continuous animation
for (( t=0; ; t+=1 )); do
# Extract one character at a time
char="${text:t % text_length:1}"
# Calculate the angle in radians
angle=$(echo "($t) * $freq" | bc -l)
# Calculate the sine of the angle
sine_value=$(echo "s($angle)" | bc -l)
# Calculate x position using the sine value
x=$(echo "($cols / 2) + ($cols / 4) * $sine_value" | bc -l)
x=$(printf "%.0f" "$x")
# Ensure x is within terminal bounds
if (( x < 0 )); then x=0; fi
if (( x >= cols )); then x=$((cols - 1)); fi
# Calculate color gradient between 12 (cyan) and 208 (orange)
color_start=12
color_end=208
color_range=$((color_end - color_start))
color=$((color_start + (color_range * t / lines) % color_range))
# Print the character with 256-color support
echo -ne "\033[38;5;${color}m"$(tput cup $t $x)"$char\033[0m"
# Line feed to move downward
echo ""
done
また bash のシェルスクリプトだ。
つまりは、シェルスクリプトを、そうと判らなように巧妙に base64 で隠しているだけで、シャツに書かれた元のシェルスクリプトは、上記のスクリプトを動かすためのランチャーに過ぎない。
で、ここまで解読できてしまえば…あとは実行して、としか言いようがない。
このプログラム自体は、それほど面白い動作をするわけではなく、ただカラフルで面白おかしい形に PEACE FOR ALL の文字を書き続けるだけだ。
2行目で起動する上のプログラムは、for 文で「終了条件のない」ループを行っている。
終了条件がないので、終わることはない。CTRL + C で停止するまで止まらない。
そして、CTRL + C した時には、元の(base64 が書かれた)プログラムも停止してしまう。
つまり、元のプログラムの最後の行(3行目)は絶対に実行されない。
元プログラムの3行目には PEACE FOR ALL と書いてあり、これは命令ではないと先に書いた。
しかし、この仕組みにより、命令でないものが書かれていても、特にエラーにはならない。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
先日来書いている町内会ホームページの話の続きだ。
wix.com というサービスで町内会のホームページを作っているのだが、これを選定したのは前任者。
この前任者も、隣の町内会が使っている、というお勧めで選んでいる。
隣の町内会の人も、会社で使っていたから選んだそうだ。
このサービス、基本的には「数ページの WEB サイトを、ワープロ感覚で作れる」といった感じのものだ。
PC とスマホを自動認識してコンテンツの出しわけもやってくれる。
コンテンツ内容は同じだが、2つのテンプレートを使い分けられる、という感じだな。
テンプレートも、PC 用を作ったらある程度自動変換してくれて、スマホ用に微調整すればよい。
あくまでも「テンプレート」が違うもので、CSS で見た目を変えるレスポンシブデザインではない。
ちょっと古いやり方なのだが、初心者にレスポンシブデザインの概念はわかりにくいので、これでよいのかもしれない。
前任者はここら辺まで作ってくれていたのだが、もともと「数ページのサイトを」作るようなもので、日々の更新がしにくい。
wix.com にはブログの作成機能があるので、僕がブログを追加した。
ブログ部分は、サイトデザインとは別の UI で文面だけを作ると、自動的にページが作られるような形だ。
つぎはぎしたような感じで少しわかりにくく、前任者はブログを使う発想にはなっていなかった。
しかし、記事の更新を考えるとブログ形式の方がやりやすい。
実は、町内会には非常に古いサイトがあり、ずっと昔の担当者が作ったものだった。
これが止まったままになっているのだが、perl CGI で作られた「会館予定予約表」の公開ページがあり、この機能が重要。
町内会長から、今のページに作れるかと聞かれていたのだが、wix.com では perl CGI は動かせない。
しかし、今の時代 Javascript がある。wix にも、ページ周囲に影響を与えないよう iFrame のサンドボックス内で Javascript を動かす機能があるので、これで何とか…と思っていた。
でも、wix には velo という仕組みがあり、もっと深い部分で Javascript を使えた…というのが前回まで書いた内容。
さて、velo を知ったのは、こちらのページで。
WixStudio となっているが、これはホームページデザイン会社がお客さんの為に使用する wix の亜種。
中核部分は変えず、デザインのための UI を「多少馴れが必要だが、効率の良い」別の形式に変えたもののようだ。
wix でも同様に velo を使える。
velo では、wix の中にある DB 等も使用して、プログラムでページを自動生成できる。
この場合、wix で生成したページはテンプレートとして使われることになる。
テンプレートに対して velo で DB 内のコンテンツ内を抽出して流し込む、という感じだ。
velo は全体の仕組みに対して作られた名前で、言語としては Javascript だ。
ライブラリが整えられていて、jQuery に類似した方法でテンプレート内の埋め込み位置を特定したりする。
先にあげたページは、blog で書かれているが何回にも分かれている連載形式。
ある程度読み進むと、「今日は何の日、を表示する」というような内容があった。
僕のやりたいことは、日付ごとに会館の予約状況を表示したい。結構違うが、類似性があると言えばある。
町内会には様々な行事予定もあるし、「今後の行事予定」を表示する機能を作って実験してみよう。
…と思ったあたりで前回の日記を書いた。
「今日は何の日」の改造として表示をするのは、比較的すぐできた。
そこから、関連するページにリンクを張れるようにしたり、詳細を表示できるようにしたり改造して、町内会ページの一番最初、目につきやすいところに「今後の行事」を表示できるようにした。
今後、と言っても全部は書かない。今後3回分の予定だけ。
そして、開始時刻や場所など簡単な概略も、あれば表示する。
さらに細かな情報が書かれたページがあれば、データとして URL を入れておくと、自動的にリンクする。
町内会の行事、回覧板で回しても、1か月以上先の予定だから忘れちゃう人多いんだよね。
(回覧板が回るのに1か月近くかかる組もあり、さらに回覧板を回せるタイミングが月に1回なので、「来月の行事」を回覧するのが通常)
それほど複雑ではないプログラムだったが、これは「Hello, world」みたいなものだ。
DB を扱う仕組み、画面表示を作る仕組みは十分理解できた。
velo で使用できる関数ライブラリ(API)は、こちらのページ でマニュアルが読める。英語だけど。
しかし、言語の入出力作法が理解できて、関数マニュアルがあれば、十分な情報だろう。
もう、何でも作れそうな気がする。(言い過ぎ)
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
以前町内会のホームページ作ってるという話を書いた。
ひとまずは、機能が揃っていないが公開していた。
だって、全部できてから、なんて言っていたらいつ公開できるかわからないもの。
ネットの世界はβ版で公開して、走りながら修正すればいいのだ。そういうものだ。
前回の記事の最後に書いたが、できていない機能というのは「町内会館の予約閲覧」だった。
いつの日に空きがあるか、月別のカレンダーで調べられる。
予約は電話してしないといけないのだけど、いつ空いているか調べられるだけでもありがたいのだ。
これ、以前のページでは CGI (サーバ側でプログラムを動かす仕組み)で動いていた。
でも、今時 CGI 設定できるサーバーなんて特殊だからね。特に、今回借りている wix.com は商用 CMS (コンテンツ・マネジメント・システム。HTML を知らないでも、ファイル単位で管理しなくても、 WEB ページが作れたりするプログラムの総称)だから、CGI なんて動かせない。
wix.com には、HTML 内に iFrame でサンドボックス化して Javascript コードを埋め込む機能がある。
これ使って同等機能をプログラムするしかないかな、と思っていた。
その場合、データを置く場所が問題になる。
Google spread sheetには、API でデータの読み書きをする機能があるので、それでデータ置き場の代用をするか…などと考えていた。
会長から「町内会館の予約閲覧は新ページに入れられないの?」と聞かれて、あれは機能的に無理なんですよ…と説明する。
そのまま持ってくることは無理だけど、何とかしたいとは思ってます。でも時間がかかります、と。
このやり取りをしてから、重い腰を上げて取り掛かろうとした。
この調査段階で、別の事に気づく。
wix.com に Javascript を仕込むのは、iFrame を使ったコード埋め込み以外に「velo」という別の仕組みがある、というのだ。
Javascript のプログラムを仕込む、なんていうのは、わからない人に見せれば混乱するだけ。
だから、この機能は丁重に隠されていた。知っている人しか使えない。
そして、この機能を使う場合には、wix.com 内で用意してある DB も使えるのだ。簡易的な機能に限定されるけど。
使ってみて分かった。
この仕組み、wix.com のベース部分の機能を、安全なようにオブラートに包んで公開したもののようだ。
理解するほど、wix.com 内の各種機能… blog やコメント機能、商品販売などが、じつは用意された DB と Javascript の組み合わせで作られているのだ、と分かる。
ざっくりと言えば、仕組みはこうだ。
DB は内部的に SQL DB を使用しているようだが、ユーザーにはそこまで見せない。文字列をプライマリーキーとして、key value store のように動作する。
ただし、特定カラムで検索することもできるし、ソートして出力もできる。ここら辺は key value store ではなく SQL 的。
そして、画面を書き換えるのは jQuery 的に行う。
jQuery がもう WEB ページ作成としては古臭いフレームワークだが、jQuery そのものではなく、wix で「類似品」を作ったもののようだ。
ともあれ、そうした環境は使える。これは、wix.com の通常機能で作成したページの中で、必要箇所にデータを埋め込んだりするのに使用するものだ。
DB 操作と HTML 操作には、用意された API を使用する。他にもいろいろな API があったが、詳細にあまり目を通していない。
あとは、普通の Javascript だ。
永続データの読み書きと、画面が自動で作成される CMS 内での、画面への割り込み方が示されたのだ。
あとは普通の Javascipt 、というのは、つまりは「なんでもできる」ということ。これほど心強いことがあるだろうか。
ひとまず、まだ練習がてらに「直近の町内イベント」を表示する機能を作ってみている。
これで、DB から絞り込んだデータを読み出して、画面に表示することはできるのだ。
これがうまく行けば、月ごとの利用予約表の読み書きだって、大して変わらない。
惜しむらくは、他に類似の悩みを持っている人がいても、プログラムをパッケージ化して渡せないことかな…
CMS が生成する画面に出力する手段として、CMS が定めた HTML エレメントの ID をプログラム内に使用する必要があるのだ。
画面構成が違う環境では、この ID も変わってしまう。プログラムだけ人に渡しても役立たない。
あとは… wix.com は、初心者向けによくできてはいるのだが、動作が遅いんだよね。
なんかもっさりしている。
あと、スマホか PC かを見極めて出力を変えているようだ。
同じ出力のまま、 CSS でレイアウトを調整するような、レスポンシブでない。
ここら辺が古臭い。
このやり方だと、キャッシュサーバー使えないんだよね。
古臭い、というのは「歴史がある」ことの裏返しでもあるのだけど、ひとまずはこの環境で続けることが大切なので、折り合い付けていきます。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
ビル・アトキンソン氏が6月5日にすい臓がんで亡くなられたそうです。
まだ74歳。死ぬには早すぎます。
Apple 社のプログラマで、初期の Mac の環境に寄与した人です。
Mac の描画ライブラリである Quick Draw を一人で書いています。
Mac の元となる Lisa というマシンが、Alto というマシンを参考に作ったのは有名な話です。
ただ、Alto にはややこしい描画を支援するハードウェアがあった。
これを「全部ソフトでやっている」と勘違いしたビル・アトキンソンは、必要な機能がすべて揃った QuickDraw を作り出すのです。
ウィンドウを描画しようとしたときに、そのウィンドウが別のウィンドウに一部分隠されていたら、隠されている部分は描かないでそれ以外の部分を描きます。
これ、今では当たり前ですが、物凄く面倒な処理です。ウィンドウによる操作、というものを始めて市販マシンで実現しようとした Lisa では、この面倒な処理をどうにかする必要がありました。
それを解決するプログラムを作ったのが QuickDraw です。
他にも、ジョブズのこだわりで「長方形を描画するときに、角を丸くしたい」という要望に応えています。
元となった Alto は、ボタンなどはすべて長方形でした。でも、現実のボタンなどは角張ったものなどあまりない。角が優しい丸みを帯びているのが普通です。
そこで、「角丸矩形」(Round Rectangle)を描画する機能を作ったのです。
また、Quick Draw が非常に優れている点として、「数学的に正しい描画が行われる」点があります。
通常のグラフィックライブラリでは、画面のドットを指定して「どこからどこへ」線を引く、などと命令を出します。
しかし、Quick Draw では、仮想の空間に描画を行い、それをどのように画面に反映するかを別途指定します。
このため、拡大縮小なども自由ですし、画面とは違う解像度を持つ、プリンタなどへの出力も綺麗に行えます。
現在の iPhone にもこの概念は受け継がれており、気軽に画面を拡大・縮小できます。
ただ、現在の iPhone は Quick Draw ではなく、その後同じ概念で開発された PostScript になっています。
ビルは Quick Draw を作っただけでなく、それを使用した「Mac Paint」も作っています。
まだ Mac 以外にマウスオペレーションのコンピューターがなかった時代に、「マウスの使い方」を伝えるためのソフトでもありました。
もちろん、グラフィックソフトですから、QuickDraw の機能を存分に引き出しています。
さらに、伝説のソフトウェアともいえる、HyperCard を作成し、すべての Mac で使えるように無償提供しています。
これは、ひと悶着合ったらしいです。ビルは自分が作ったソフトを多くのユーザーに使ってほしくて無償を主張し、ジョブズは会社の製品なのだから、有償を主張する。
最終的に「無償提供しないなら会社を辞める」とビルが言ったため、ジョブズが折れています。
さて、この HyperCard の何が伝説かというと、体験していない人にはちょっと説明しずらいのです。
まず、HyperCard はカード型データベースです。
画面サイズの「カード」を作り、そこにありとあらゆるものを格納できます。文字に限らず、グラフィックでも貼り付けられます。
Mac の Copy & Paste 機能を駆使して、自由にデータを張り付けておけますし、他のソフトにコピペできます。
画像は無理ですが、文字列なら検索もできましたから、ちゃんとデータベースとして機能します。
これだけであれば、難しい前提知識なしに誰でも使えました。
そして、貼り付けてある「部品」にプログラムを書き込むことができました。
プログラムがあると、部品がクリックされたときにプログラムが実行されます。
これにより、クリックされると「次のページを表示する」とか、「隠されていた部品を表示する」とか、「音を再生する」とか…とにかくいろいろできたのです。
いろいろできると当然遊びたくなります。
実は、ここで書く「プログラム」は非常に単純なもので、誰でもすぐ覚えられるレベルなのですが、簡単なゲームを作るには十分でした。
実際、 HyperCard で書かれたゲーム、というのは Mac では非常に人気があったのです。
ちなみに、「HyperCard以前」のプログラム環境では、ボタンを押したら特定のプログラム実行、ということをするのに、何十行ものプログラムを書く必要がありました。
まず画面にボタンを描いて、そのボタンをクリックするための仕組みを作って、クリックされたら動くプログラムを作って、としないといけない。
データベースとして画像を扱い、その画像を「ボタン」と見立ててプログラムを与え、ボタンを押したら実行される、という考え方が大発明で、この考え方は現在他のプログラム言語にも取り入れられています。
また、ボタンを押したことがそのボタンが置かれているカードにも伝わり、カードの束(スタック)にも伝わり…
プログラムはボタン部品だけでなく、スタックなどにも書けました。
こうした「上位の部品に出来事が伝わる」という仕組みも、今のプログラム言語に取り入れられています。
現在、一番 HyperCard の概念を引き継いでいるのは、ブラウザ上で動く Javascript ではないかと思います。
当ページでも Javascript は使用していますし、Web 上の Javascript は多くの人がお世話になっているはずです。
HyperCard がなければ、こうした環境は作られなかったでしょう。
ただ、Javascript が同じような環境か、というとそれは違います。
Javascript は結構プログラム上級者向け。誰でも気軽に楽しめる、というものではありません。
HyperCard では、もっと簡単・気軽にプログラムを作れました。
そうした環境を作り出した、というのが、ビル・アトキンソンの突出した才能でした。
話が前後しますが、Mac 以前の Apple// のころに、Apple 版 Pascal を作ったのもビル・アトキンソンです。
当時は BASIC がプログラム言語として普及していましたが、次は Pascal 、と誰もが思っていました。
実際に普及したのは C 言語でしたが、Pascal とは兄弟のような関係にあります。
(どちらも Algol を手本に作られた言語)
ただ、Pascal の方が初心者でも扱いやすい仕組みがありました。
だから、BASIC の次は Pascal 、と考えられていたのです。
でも、コンピューターがホビーストだけのものではなくなり、広く普及すると、プログラムする人は激減します。
コンピューターが普及しておらず、市場が小さなときには、市販ソフトも多くはありませんでした。
欲しいものがあったら、プログラム言語を覚えて自分で作るしかなかった。
でも、普及したら市販ソフトが沢山作られるようになりました。
多くのユーザーは、ただその市販ソフトを使うだけでいいのです。プログラムを作る必要はありません。
そして、そうした「市販ソフト」を作る人の間では、Pascal よりも C の方が支持されます。
Pascal は、初心者の為に速度効率よりも扱いやすさを優先しているところがありますが、C は高速に動作します。
代償として「初心者向けではない」のですが、市販ソフトを作るような人には問題ありませんでした。
それはさておき、ビル・アトキンソンは、Apple // の Pascal の為にグラフィックライブラリも作りました。
Apple // は画素も荒く、色の扱いにも制限がありました。グラフィックライブラリでは、そうした制限を気にせずに絵を描き、内部で Apple// の制限にあった形に変換して描画する、というような仕組みがあったそうです。
これがのちの QuickDraw の原型になっています。
Mac の初期の内部 ROM が、Pascal を前提とした形で作られているのも有名な話です。
HyperCard の後、ビル・アトキンソンは Apple 社内で「Knowledge Navigator」の実現化プロジェクトに携わります。
1980年代末、Apple はウォズもジョブズも退社した後で、どちらに向かえばよいのか示せる人がいませんでした。
そこで、社長のスカリーがぶち上げたのが Knowledge Navigator という大構想。
自然言語で会話することでコンピューターに指示を与え、コンピューターは個人の専属秘書のようにふるまいます。
その当時の技術ではとてもできない、と分かっているのだけど、コンピューターがみんなの暮らしを豊かにするためには、こうした方向に向かわなくてはならない、という「意識の共有」を、社内のみならずコンピューター業界に対して行ったのです。
実際、その後長い時間をかけ、コンピューターはその方向に進んできました。
でも、Apple 社としてはそんな長期計画は儲からない。実現化プロジェクト1990年には中止になります。
そこでビル・アトキンソンが興したのが「General Magic」という会社。
Apple での研究の続きを行い、個人のための「秘書」となるコンピューターを作ろうとしました。
まだインターネットが普及する前の事ですが、必要ならネットワーク上で最新の情報を集め、ユーザーが「知りたいこと」に応えてくれる。
端末の OS は MagicCap と呼ばれ、ビルがほぼ一人で書き上げたそうです。
そして、この MagicCap は、先に書いたようにネットワークを前提としていました。端末内でもプログラムは動かせるが、必要に応じてネットワークにもプログラムの実行を依頼する。
UNIX 等の実験的なネットワークではそうした実行例はありましたが、市販する商品としては非常に先進的。
しかし、当時の多くの人は、こうした概念を知りません。製品としてわかりにくいのです。
そこでビル・アトキンソンが作った造語が「Cloud」。
雲、という意味ですが、ネットワークの向こうの、なんだかもやもやした部分に、見えないけどいろいろな情報がある。
そことやり取りすることで、必要なことを実現する、というのです。
今では当たり前に Cloud って使われてますね。ビル・アトキンソンによる造語です。
この OS は、協力各社から次々商品化されます。
日本でも Sony から MagicLink の名前で発売されています。
でも、時代が早すぎました。
通信はまだ電話回線に頼る時代。手元の端末と遠隔サーバの協調動作、というのは、通信速度がネックになります。
結局、発売はしたものの非常に遅くて使いづらく、しかも通信料金がかさむ、というなんとも使いにくいものだったのです。
しかも、商品的に失敗だったため、対応サーバは短期間の後に次々と閉鎖。
端末を購入した人も、サーバーがなくては使い続けることができません。
今では各社が同様のことを実現していますが、「技術的に実現可能」な時代になってからも、GeneralMagic 社の特許に抵触するため提供できない、ということもあったとか。
各種特許が切れたのが 2010年ごろ。その頃から Cloud 技術が急に普及してきたのも、そういう側面があったようです。
構想が早すぎて、時代が追いつくのに 20年かかってしまったのです。
ビル・アトキンソン。
当ページを書き始めたころの、僕の「ヒーロー」の一人でした。
ご冥福をお祈りします。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
僕はまだ遊んでないのだけど、長男が遊んでいるのを後ろから見ていて思ったこと。
(長男は小学生のころに、すでに15年前のゲームだったダブルダッシュ!を遊んでからこのシリーズが好き。マリオカート8もやり込んでる)
今度のマリカー、AM1 研の影響受けてない?
…いや、そんなことあるわけないので与太話なのだけど、まぁ聞いてくれ。
今回のゲームの概要発表があった時に思った。
レースゲームなのにオープンワールドらしい。それってHarley-Davidson & L.A. Riders?
知らない人の為にざっくり書くと、「オープンワールド」という概念は、セガの作った「シェンムー」が発祥、とされている。
小さな町ではあるが、丸ごと作り込んで、その中で時間で生活する人たちを作り、自分が操作する主人公は自由に行動できるようにしたのだ。
でも、同じセガの中で、もっと先にそういうことをやったゲームがあった。それが先に書いた Harley-Davidson & L.A. Riders だ。(長いので以下 L.A. Riders と表記)
このゲームでは、名前の通り L.A. …ロサンゼルスの街を丸ごと作り込んだ。
その中で、バイクを駆って自由に行動できる。
とはいえ、業務用だったので短時間で遊ばせる必要がある。
できるのは「ランダムに提示されるチェックポイントを回る」というレースゲームだった。
でも、これであるていど「大きな街を作り込む」技術にめどが立ったのだ。
今回のマリオカートはオープンワールドになっており、自由に走り回れる。
…とはいえ、普通のレースの場合は、オープンワールドの一部区画を区切ったり道を閉鎖したりして、レース用に整備している、という形になる。
それでも、今までのような「周回コース」ではなく、次々と景色が変わる長距離を走ったりできるのだけど。
本当に自由に走り回れるのは「フリーモード」だ。
家庭用ゲームなので時間制限なく走れるが、時々ミニゲームが始まるスイッチを見つける。
押すと、チェックポイントが示されて、制限時間内に回るミニゲームが始まったりする。
車でチェックポイントを回るのだから当然そうなるだろう、という感じなのだが、L.A. Riders を知っている身としては、そっくりに見える。
もう一つ、こちらは見てから思ったことだが、「クールライダーズ」も感じる。
一つのレース場を走るようなゲームではなく、世界各地を走り抜けていく大レース。
「マリオカートワールド」も、名前の通り世界各地をイメージしたステージを駆け抜けていく。
「ライダーズ」とついている通り、バイクで走るレースゲームだが、余り真面目なものではない。
バカバカしいと笑いながら遊ぶタイプ。パーティゲームだと思っていい。
小さな障害物に当たると、ポコポコと飛んでいく。
レースゲームだから障害物をよける方が良いのだが、当たっても大した問題にはならないのだ。
今度のマリオカートも、街の中の街頭やベンチ、ガードレールなど、当たると飛んでいくのだ。
ガードレールがそんなに簡単に飛んだら歩行者の安全守れないでしょ、と思うが、自由に走ることを優先しているのだろう。
そして、やたらとジャンプする。
車やバイクなのに、ちょっとした段差や壁を使って、すぐにジャンプできるのだ。これも、オープンワールドを自由に走るために必要なのだろうが、ジャンプの際に、いちいちポーズを決めてアピールできる。
…これもクールライダーズなんだよね。
クールライダーズ、レースゲームなのにやたらと跳ねまわり、ジャンプするとポーズを決めて「Cooool!!」とか表示された。
他にも WING WAR っぽさもある。
これも AM1 研のゲームで、飛行機の空中戦を行うゲームなのだけど、障害物にぶつかっても「転ぶ」だけなんだよね。
マリオカートワールドも、マリオカート8からの引継ぎで「空を飛べる」。
でも、何かにぶつかっても転んで落ちるだけ。事故にはならない。
…というわけで、話半分に聞いてもらっても構わないのだが、1990年代後半の セガ AM1 研のテイストを感じるのだ。
よく知っている人には納得してもらえると思うが、なにぶん古すぎる話だし、上記にあげたゲームを全部知っている人がどれだけいるかわからない。
別に真似したわけではなく、「似たようなゲームを作っていたら、同じ結論にたどり着いた」だけだとは思うのだけど、すごく懐かしさを感じたので主張したかったのでした。
同じテーマの日記(最近の一覧)
別年同日の日記
16年 アラン・チューリング命日(1954)、ドナルド・デービス誕生日(1924)
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
Switch2 届いた。
Switch 発売の際は、事前に「しばらく様子見」と思っていたら、発売後の人気爆発で入手困難だったからね。
今回は最初から予約していたのだ。
もちろん、予約時点で申し込み殺到で、抽選なのはわかっている。
僕は運よく当たった。自慢するつもりはなく、本当に運が良かっただけだ。
(任天堂の抽選は外れ続けている。
取り下げてよいのだが、外れた人は次回に持ち越し、というシステムなので、取り下げることもできない。
僕が当たったのは Amazon に申し込んだ分だ)
先に書いたが、昨日は仕事に加えて町内会の作業も忙しく、Switch2 の開封は夜。
ひとまず起動して一通り見るが、今まで使っていた Switch は子供たちも遊んでいるのでそのままで…というつもりだった。
でも、完全移行を促されるのね。完全移行しない、という選択肢はない。
いくつかのゲームは、セーブデータが Switch2 に移動し、Switch からは消えてしまう。
(もちろん、そうならないゲームもある)
この移行作業が、とにかく時間がかかる。届いてすぐに開封して始めとけばよかった。
移行作業が終わったら、今度はゲームの一斉ダウンロードが始まった。
移行したのはセーブデータだけで、ゲームはストアから再ダウンロードなのだ。
最初は様子を見ていたのだが、遊びたいのでダウンロードしながら操作。
「NINTENDO SWITCH2 のひみつ展」を遊びたい。
ストアに入ると、同梱ソフトであるマリオカートをダウンロードできるよ、と言われるので、ダウンロード指示。
そしてすぐに「ひみつ展」を購入。マリカーのダウンロードはストップさせて、ひみつ展を優先させる。
Wii が発売されたときに「はじめての Wii」というソフトがあった。
モーションセンサーと、センサーバー、という全く新しい遊び方について、ミニゲームで使い方を体験させるためのソフトだった。
「ひみつ展」も同じようなものと聞いている。なので、マリカーのようなビッグタイトルもいいのだが、まずは新しい機械のすごいところを体験してみたいのだ。
それほど時間がなかったので少ししか遊んでいないが、よくできている。
ミニゲームはもちろんあるが、様々な「工夫」をゲームの形式で教えてくれるのだ。
ゲームを作るうえで、「技術」はやりたいことを支える裏方であり、そこを自慢してはいけない。
でも、自慢ではなく、工夫を開示することで、これでどんな遊びが出てくるのだろう、と素直に面白がれる。
マウスで遊ぶミニゲームが面白い、と事前に聞いていた。実際面白かった。
でも、もっと驚いたのは、「背面スタンド」をゲームにしてしまったことだ。
Switch は背面スタンドにいくつかのタイプがある(我が家のは初期型で、壊れやすかった。実際早々に壊れた。その後改良された)。
Switch2 では、これをかなり広い範囲で、自由な角度で固定できるようにしている。
そして、モーションセンサーが本体にも入ったようだ。以前はコントローラーにしか入っていなかった。
それで何をするかというと、「30度に立ててください」とか言われるのだ。30度と思うところで立ててしばらく待つと、モーションセンサーで重力の方向を調べて角度を割り出す。
そして、狙った角度との違いを示されるのだ。
こんなゲームが成立するのはミニゲーム集だから、なのだけど、遊びの幅が広がる気がしません?
他にも、様々な技術的な工夫を伝えてくれる。
さらには、実は任天堂は以前からその技術に取り組んでいた、という豆知識もある。
今回コントローラーがマウスになっていることが話題になっているが、そういえばスーファミ用のマウスってあったね…。言われるまで忘れてたよ。
120fps の体験とか、テレビに繋いでいると「本体をテーブルモードで」と言われてしまう。
いや、我が家のテレビが 120fps 対応ではないからだけど。
それで、簡単な動きを見せられて「20fps か 120fps か」の2択で答える。
さすがに 20 か 120 かはわかりやすいのだけど、60fps と 120fps だと見極めは難しい。
でも、慣れると明らかにわかるようになる。わかるようになると、120fps 対応のテレビが欲しくなる…
あ、そういえば「4K テレビに接続すると遊べます」というミニゲームもあったな。
「あえて」ファミコンのスーパーマリオの 1-1 を、4K テレビで遊ぶらしい。
これは見られていない。4K テレビも欲しいよね。
技術的な工夫を知ってほしい、それで広がる新しい遊びの可能性を伝えたい、というのはもちろんなのだけど、ここで「工夫」として取り上げるくらいなのだから、全部特許取っているのだろう。
これは、他社に対する牽制でもある。
ミニゲームの形とは言え、「背面スタンドの角度」で遊ぶゲームは、もう他社は作れないわけだ。
いや、そんなゲーム今後もあり得ないでしょ、と笑うことなかれ。今は背面スタンドだが、場合によっては「物理的に角度を作るゲーム」が作れなくなるかもしれない。
任天堂は DS の時にマリオ 64 を移植した。
アナログスティックがなかったので、タッチパネルでアナログスティック代わりにする操作法を作り出し、特許を取った。
当時は、タッチパネルを使うゲーム機なんて他になかったので、そんな特許任天堂以外には関係ないだろう、と誰もが思っていた。
しかし、スマホ時代になった時にすごく効いたからね。
スマホでゲーム作ろうとすると、ことごとくこの特許に引っかかるのだ。
(今は 20年たって特許が切れたので、問題なく作れる)
それが、ずっと後で時代が追いついたのだ。
背面スタンドで遊ぶ、だって、今後何が起きるかなんて予測できない。
思いついた遊び方は全部特許にして、世の中に公開してしまった方が良い。
「ひみつ展」には、そういう側面もあるのではないかと思う。
先に書いたように、まだ遊んでいる最中。
やっと「内部基板」に入ったところ。
外形的な特徴だけでなく、内部基板とかもゲーム上で見せてくれるのだ。
「本物を分解しないでね」って注釈付きで。
不思議で興味深いゲームである。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
町内会で購入したコピー機が納入された。
京セラ TASKalfa 2553ci。
京セラのコピー機は、頭2桁が「1分間にコピーできる枚数(速度)」で、後ろ2桁が世代。
25 はカラーコピーのいちばん安い廉価機で、現在の最新世代は 54。
というわけで、1世代前の廉価機の中古の購入でした。
いままで使っていたのは、今はなき FujiXerox の DocuCentre の…とにかく古いやつ。
型番わからないけど 25年前の物、とのこと。
これは廃棄処分で引き取りをお願いしたのだが、もう一台あるからそれも引き取って欲しい、としばらく前に会長に言われた。
もう一台って、僕知らない。
今回、コピー機が壊れたので置いてあった奴を使おうとしたが、壊れてて使えなかった、とのこと。
うちの町内会には、町内会館とは別に「第2町内会館」があり、そちらに置いてあったらしい。
まずは納入。特に問題なく動いた。普通のコピー機だからね。
引き取り。もちろん元々あったものは簡単に引き取れるのだが、もう一台が問題。僕は見たこともない。
第2会館に行って、言われた場所を見ると…確かにあった。
でも、コピー機じゃなくてカラーレーザープリンタだった。同じく DocuCentre。
会館に置いてあったコピー機も、コピー機として使えるようにパーツを組み合わせたもの、と業者の人が説明してくれた。
今でもコピー機って部品ごとに組み合わせられるのだが、もっと露骨に「プリンタとスキャナ」を直結できるようになっていたのだ。
コピー機としての操作パネルはスキャナ側にあるので、もう片方はカラーレーザープリンタとして機能する。
そりゃ、これだけでコピーはできないよね。
「壊れてた」と聞いたけど、コピー機として使えなかったということだろう。
さて、業者の方が帰った後、コピー機を設定する。
家から持参したイーサネットケーブル(今更の Cat.5e)で、もともとコピー機横にあった怪しい WiFi 中継器のイーサポートに接続。
この中継器も、僕が由来知らんのよ。この使い方ができるのかもわからない。
まぁ、どうやら契約しているケーブルテレビのネットサービスのオプションで、中継器も格安レンタルしているらしい。
町内会館結構広いのに、ルータが置いてあるのがテレビの横、会館の端の所なので、全体で使うためには中継器が必要なのだ。
それが、たまたまコピー機の横にあった。(ここはもともとコピー機を置く予定で設計されていて、電源が豊富にあるため)
コピー機のパネルを操作してネットワーク設定を見る。
すべて DHCP に従う形で、もう IPv4 アドレスが割り振られていた。
うん。正常につながったということだ。
町内会所有のパソコンに、京セラのページからプリンタドライバをインストール。
テストページを出力したら、無事出力できた。
町内会の人はご高齢の方も多く、大多数が、パソコンはよくわからん、という感じ。
多くの人はただのコピーとして使うだろうが、PC から操作できると特別なこともできるのだ。
たとえば、120cm の長尺印刷。
いままで、イベントの際に何枚もの紙にタイトルを分割して出力して、セロテープで張り合わせたりしていた。
それを長い1枚の紙に印刷できる。
さて、少し迷ったが、一度コピー機を正規手順で電源 OFF にして、電源コードを繋ぎ変える。
会館は申請すればだれでも使えるのだが、コピー機を勝手に使われるのは問題があるので、電源に「鍵」をかけてあるのだ。
特殊な電源ボックスで、鍵を回すことで ON / OFF できる。
鍵は町内会の人なら知っている場所に置いてあるので、町内会の人だけが使える。
しかし、今時のコピー機ではそれだと壊れる可能性がある、と業者の人に注意された。
今時のコピー機、内部的には「パソコンとスキャナとカラーレーザープリンタを組み合わせたもの」だからね。
ハードディスクも搭載しているし、急に電源断すると壊れる、というのは理解できる。
先に「正規手順で電源 OFF」と書いたのもそのためだ。
ただ、内部が「パソコン」なので、以前のコピー機にはできなかったこともできる。
ユーザーのログインが必要な設定にできるのだ。
これも、本当にアカウントとパスワードで個人を識別する方式から、もっと簡易に「部署コードを申請してから使う」程度にもできる。
本来は誰がどれだけ使ったかを確認してコスト管理するためのものだ。
今回は、部署コード方式を使う。
何かと町内会のメンバーしか知らない「暗証番号4桁」を共有しているので、その番号を部署コードとして登録した。
これで、このコードを知っている人しか使えない。電源に鍵は不要になる。
ただ、余り頻繁に部署コードを聞かれるのも使いづらい。
連続してコピーする場合なども考え、5分使わないと省電力モードになる設定にした。
省電力になると、再度使うときに部署コードを聞かれる。しかし、それまでは自由に使える。
内部のハードディスクに、よく使う書類とかを置いておくと、パソコンなしで印刷できる機能がある。
これも上手く使えば便利そうだが、ちょっと使いどころが難しい。
内部のハードディスクが NAS というか、プライベートクラウドになっていると便利なのだけどね。
組別世帯数の表というものがあり、引っ越しなどあると更新しないといけないのだ。
現在、この管理が問題になっている。個人が管理していると負担が大きいし、共有するのはパソコンがわからない老人には難しい。
わかる人がクラウドで共有・更新して、簡単な操作でコピー機から出力できる、だと便利だったのだが。
まぁ、もともと Excel で管理していたので、Microsoft の OneDrive に入れて共有して、Microsoft 365 for the web (WEB ブラウザで使用できる無料 Office のサービス)で修正、印刷、というのが良いと思っている。
問題はパソコンできない人にどう広めるかだな…
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |