コンピュータ35ページ目の日記です

目次

前のページ
2019-03-29 村井純 誕生日(1955)
2019-04-17 新サーバー設定中
2019-04-19 micro:bit 買った
2019-04-26 Amazon Fire HD 10 購入
2019-05-03 ServiceWorker と indexedDB
2019-05-04 Minit
2019-05-08 続:Minit
2019-05-14 パソコンは買ったのだが…
2019-05-20 Nexus7 (2012) 復活
2019-05-29 Alexa Wunderlist 連携
2019-06-09 新マシンセットアップ中
2019-06-12 Google drive バックアップと同期
2019-06-14 google photos その後
村井純 誕生日(1955)  2019-03-29 17:21:54  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日、3月29日は、村井純 氏の誕生日(1955)


すごい人だ、というのはずいぶん以前から知っていたのですが、いまだにその程度の認識から抜け出していません。

インタビュー記事拾い読みしたりとか、その程度の知識しかなくて、ご本人が書かれた書籍などはほとんど読んでません。


そんな状態で、あまり偉そうな紹介はできない。

ふんわりとした概要だけ示して、あとは各種記事にリンクして丸投げします。申し訳ありません。




村井純 氏は、日本のインターネットを黎明期から支え、今も第一線で活躍する方です。


「日本のインターネットの父」と呼ばれることも多いです。ご本人はこの呼び方嫌いだそうですが。

生み出したわけではなく、ただアメリカにあったものを紹介したわけでもなく、「世界と一緒に作り上げてきた」。


しかしまぁ、生みの父ではなくても、育ての父か…町ぐるみで子供を育てる、「近所の親父さん」くらいの役割は果たしていると思います。


まだ貧弱な技術でしかなかった時代から、正しい方向に長年かけて育て上げてきた。

ある程度育ったら、口を出しすぎずに見守り、おかしなことになりそうな時には強い意見を出してきました。



海外では、「インターネットサムライ」とも呼ばれています。

今年の2月には、フランスから、フランスの最高勲章であるレジオン・ドヌールを与えられています。


これは「日本の」だけでなく、世界のインターネットを育ててきた功績から。

IPv6 の実装には、日本の技術者が多くかかわっています。

実際の開発とは違いますが、全体を指揮したのは村井氏でした。




日本の最初の「インターネット接続」は、慶應義塾大学の大学院生であり、東京工業大学総合情報処理センター助手でもあった村井純氏が、2つの大学間を「勝手に」接続したことに始まります。


1984年9月のことだそうです。電話回線を使用して、300bps のモデムで接続し、uucp 運用したそうです。

接続理由は、個人的な都合で、データのやり取りができると便利だったから。



uucp って、メールとかのデータを、時々まとめてやり取りする形式ね。

インターネットといっても、今みたいな「常時接続」ではありません。

決まった時間になると自動的に電話をかけて、その時点で溜まっているデータを双方で交換して、終わったら電話を切るの。


ところで、1984年9月ということは、まだ「電電公社」の時代です。

1985年4月には NTT に組織変更し、通信自由化されるのですが、この時に「電話機」も自由に交換することが可能になります。

それまでは、電話機と電話線は電電公社が「貸し出している」もので、勝手な改造は許されませんでした。


…何が言いたいかというと、モデムを接続するのが違法な時代でした。

大学に相談せずに勝手にやった、とのことですが、相談しても認めるわけにいかないのがわかりきっています。



この「ネットワーク」について、いろいろなところで話したところ、東大の教授から「3地点はないとネットワークとは呼べない」との指摘を受けます。

そこで、1か月後の10月には東京大学が参加。


大学間を接続するネットワークなので、Japan University NETwork…JUNET と呼ばれました。


この後、さらに多くの大学・研究機関が参加していきます。

10年後の 1994年に「役割を終えた」として JUNET は解散しますが、最盛期には 600以上の組織が参加していたそうです。




JUNET は「日本最初のインターネット」なので、いろいろなものが生み出されています。

その一つが、日本語をコンピューターで扱うための文字コード体系。


JUNET 以前に、JIS 漢字自体は制定されています(1978)。

しかし、これは「文字の形(グリフ)と、それを示す数値(コードポイント)のセット」を示したものにすぎません。


JIS 漢字のコードポイントは巧妙で、「区」と「点」の2つから作られています。

そして、区・点ともに、1~94の数値になっています。


この「1~95」という数値は、ASCII コードで印刷可能な文字数、94文字に由来します。


印刷可能「ではない」部分は、コンピュータープログラムが、内部動作のために使用しているかもしれません。

しかし、印刷可能な文字部分であれば、その文字を別の文字に差し替えても、動作に支障はないでしょう。


つまり、JIS漢字は、ASCII との互換性を最大限に考えたうえで作られているのです。


とはいえ、ここまでは「互換性を考えています」というだけの話。

実際に、コンピューターで使えるようにする必要があります。


また、ASCII の文字と同じ場所を使う…ということは、ASCII とは同時に使えないことを意味します。

1つの文章内に日本語と英語を一緒に書けないのです。


それでは不便すぎますから、解決する必要があります。



これを定めたのが、当時 JUNET コードと呼ばれ、のちには国際標準の ISO-2022-JP として定められた文字コード体系です。


ASCII には、もともと「ASCII から脱出する方法」が用意されていました。

これを応用して、ASCII から「脱出」してJIS漢字にしたり、JIS 漢字からまた「脱出」して ASCII に戻ったりします。


今でも、メールなどでこの文字コード体系が使われることがあります。




1985年、JUNET で縁のあった慶應義塾・東京工業大学・東京大学間で、WIDE 研究会が発足します。

インターネット接続に関する研究会でした。


WIDE 研究会は、1988年には WIDE プロジェクトへと発展します。


WIDE は Widely Integrated Distributed Environment の略…ということになってますが、略称の頭に WIDE って入ってますね。


直訳すれば「広域統合分散環境」。統合されつつも、分散された環境…つまり、今のインターネットでできるようなことを研究する、というプロジェクトです。

このプロジェクトは現在も続いています。


JUNET は、大学間を接続して情報交換を行うためのネットワークでした。

それに対し、WIDE はそうした環境を研究し、必要であれば新たな提案をしていくためのプロジェクトです。


密接な関係にはありましたが、目的は明確に違っていました。




1985年には、JUNET と、アメリカの USENET が相互接続します。


USENET は、UNIX のユーザーグループである USENIX が主体となって開始された、インターネット上の情報交換ネットワークでした。

これをベースとして、のちに汎用化された netnews に発展しています。


#USENET は uucp 運用だったが、netnews は nntp 運用。内容については基本的に引き継がれた。


この時は、国際電電(現在の KDDI)を巻き込んだプロジェクトでした。

アメリカまで「電話線で」接続すると、国際電話料金がかかります。


しかし、国際電電を仲間に引き入れたことで、「接続実験」として無料で接続ができたのです。




ところで、このころまで日本のドメインは .junet でした。

しかし、アメリカと相互接続するようになると、ドメインを「公式に」定める必要が出てきます。


そこで、アメリカのドメイン管理団体である IANA から、村井氏個人が委任される形で、.jp が作成されます。


#IANA も、事実上は個人運営。Jon Postel氏が管理していました。


しかし、.junet から .jp への移行は 1989 年頃でした。





1989 年には、アメリカと専用線で接続しています。


このころには、国内でも専用線…電話線を使用した uucp ではなく、現在のような常時接続が始まっていました。

とはいえ、まだ専用線は高価で、大きな組織でないと使えませんでしたが。


国内でのネットワークは、実験的なものとして国も参加した一大プロジェクトでした。

これをアメリカともつなげよう…となった時、国内の各所から反対の声が上がりました。


インターネットも、まだ一般化しておらず、誤解の多い時代です。

もともとは国防総省の研究から始まったネットワークで、軍の機密情報などにもつながっているのに、日本から接続したら国際問題になるのではないか?

それが、反対の主な理由でした。


#国防総省は ARPA-NET の研究に資金は出していますが、軍事用には専用の回線 (MIL-NET)を作っていました。


これに関しても、村井氏が個人でアメリカ側の担当者から「日本の接続を歓迎する」という直筆メモをもらってきて、周囲を説得したのだそうです。




1992年、IIJ (インターネット・イニシアチブ・ジャパン)が設立されます。


JUNET / WIDE は、大学間のネットワークでした。

「大学の」費用で維持され、「研究目的」の使用しか認められません。


そのままでは、自由なインターネットの普及は望めません。

そこで、WIDE とは別のネットワーク網を作り出し、自由な目的で使用できるインターネットを作り出すことが目的でした。


もちろん、村井氏も創設メンバーに名を連ねています。


実際、IIJ 設立後、急速にインターネットは普及し始めます。




1997年、WIDE プロジェクトで、m.root-servers.net の運用が始まります。


これは、DNS ルートサーバーと呼ばれる、非常に重要なサーバ。


本当は日本には「J」が割り当てられる予定だったそうです。Japan だから。

しかし、J をアメリカの組織が運用することになり、じゃぁ別のサーバーを…となった時に「村井に任せるから M で」と M が割り当てられたのだとか。



DNSルートサーバーは、全世界で、A~M の13個しかありません。


DNSルートサーバーの情報もまた、DNS で配布されます。

DNS の技術的な話で、この情報は 512byte に収める必要があります。

そして、512byte では13個しか収まらないのです。


もっとも、非常に重要なものだから、1つのアドレスを複数のマシンで受け持っていて、「13台」ではないのですけど。


10個はアメリカ。ほかに、日本とスウェーデンとオランダに1個づつあります。


日本の M は、東京と大阪、ソウル、パリ、サンフランシスコに実際のサーバーがあるのだそうです。

それぞれの拠点でも複数台あるのですが、重要なものだからこそ、詳細は明かされていません。




1998 年には、WIDE の下位組織として、KAME Project が活動を開始します。

同時期に、USAGI Project も作られました。


現在、多くのインターネット接続は IPv4 と呼ばれる規格で行われています。

しかし、1991 年の時点で「このままでは近いうちに問題が起きる」ことがわかっていました。


そこで、次世代(Next Generation) の規格として IPng の策定が開始されます。

これはのちに IPv6 と名を変え…策定中の仕様案も、途中で大幅に変わったりしながら、1998年にやっと仕様が決定します。


しかし、仕様だけあっても意味がりません。

すぐに…というか、仕様がほぼ固まった時点で、前倒しで実際に動くプログラムの作成(実装)が開始されます。



BSD 系の UNIX に実装を行ったのが、KAME Project でした。

当時は、Linux 人気が出始めたところで、まだ BSD の方が「信頼性がある」と考えられていました。


これが「世界初の IPv6 実装」となり、Linux への移植が行われます。これが USAGI プロジェクトです。




2000年代にはいると、急速にインターネットが普及し、村井氏の仕事も「周辺環境整備」から、今後の在り方の研究に変わっていったようです。

しかし、今でも活動は続いています。


昨年の例でいえば、漫画の海賊版をダウンロード配布させるサイトが社会問題となりました。

政府がそうしたサイトの「ブロッキング」(DNS 等を細工し、到達できないようにする)を正当化する法律を作ろうとしました。



これに対し、WIDE プロジェクトが反対。

「インターネット上の海賊版対策に関する検討会議」が行われ、村井氏は座長も務めています

まだ、インターネットを正しい方向に導くために、精力的に活動中です。


#ここでは深入りはしませんが、当の「保護対象」である漫画家協会がこの法案に反対したこともあり、提出断念となっています。




インターネットの、本当に黎明期から現在に至るまで、多くの影響を与え続けていることがわかると思います。


そうした功績もあり、今年の頭には、冒頭に書いた通り、レジオン・ドヌールも受勲。


まだ存命の型ですので、近年の活動などについてはインタビュー記事などを読んでもらった方が良いかと思います。


NTT DATA 2017/7/21

CiP協議会 2017/9/20

INTERNET Watch 2017/11/30

Wired 2018/12/11

日経ビジネス 2019/1/14



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

今日は何の日

別年同日の日記

04年 親不知

11年 卒園式

13年 バードストライク

16年 アクティベートにハマる


申し訳ありませんが、現在意見投稿をできない状態にしています

新サーバー設定中  2019-04-17 18:14:43  コンピュータ

▲目次へ ⇒この記事のURL

去年の9月に、社内実験用サーバーを新しくしたい、と書いた。


とっくにサポート期間を過ぎている、CentOS5 だったのだ。

さすがにサポートが切れているのはまずいので、新しくしたかった。


しかし、やっとサーバーを購入したのは、12月だった



物理マシンへの OS インストールに紆余曲折があった。

最近の流行は、サーバーでも Ubuntu のようなので、Ubuntu server を使ってみるつもりだった。


…しかしこれは、「デスクトップで Ubuntu に慣れた人が多いから」流行しているだけだ、と思った。

サーバー用途向けに作ってある、としているパッケージでも、サーバーとしては足りないものが多いのだ。


「使えなくはない」が、「満足して使える」ものではない。

結局 CentOS で行くことにした


#サーバー初心者であれば、Ubuntu は悪い選択ではない。

 できることが限られる、というのは、みんな横並びなので情報を得やすい、ということでもある。



…その後がなかなか進まなかった。

バーチャルマシンとしても CentOS をインストールして、古い環境と同じように整備する。


これが、古い環境が古すぎて、ただファイルを持ってくれば終わり、とはいかない。


旧マシンでは djbdns を使っていたが、nsd + unbound に変えることにする。


php のバージョンが上がり、この WEB サイトを表示していたプログラムが動かなくなった。


このサイトは、僕が設計した独自の CMS で動いている。

古いものなので mysql 関数群を使用していたが、今後の php ではこの関数群はサポートされない。


mysql と比較的動作をそろえたまま、オブジェクト対応になった mysqli 関数群がある。

動作が近い、とはいえ結構違うものなので、簡単には置き換えられない。


とはいえ、置き換えるのに一番早そうな設計指針をたて、ちまちまと改良した。

多くの個所は機械作業で修正でき、一部は大幅な見直しが必要になったが乗り切った。


ついでにこの時新機能も追加している。


公開用サーバーは比較的新しく、改良ソースでも動作する。

なので、完成したらさっさと公開用サーバーのプログラムも入れ替えた。


当初はおかしな部分もあったが、すでに安定動作している。




その後は、年度末進行もあってサーバーの移行も止まっていたが、古いファイルの整理などは進めていた。

旧サーバーには、古い仕事のファイルが多数ある。必要なものは tar+bzip2 して残し、不要なものは消去する。


新サーバーのディスクは、最小限のサイズにしたいのだ。

そうしたほうが、仮想サーバーを物理サーバー間で移動したりする際に、ファイル転送が速いから。



やっと年末・年始進行が終わって、今週は一息付けた。

そこで、ローカルでの移行作業を一気に済ませ、やっと社内実験用サーバーを更新することができた。



「サーバーを更新したい」と思ってから半年以上かかっている。

しかし、まだ作業は半分しか終わっていない。


新サーバーは仮想環境を kvm にしている。

しかし、もう一台の物理サーバーは xen だ。


これでは仮想サーバーの可搬性がない。もう一台も kvm にしなくてはならない。


xen 仮想サーバーを kvm 仮想サーバーに変える、という未知の作業があるが、調べた限りではそれほど難しくないようだ。


kvm にして新サーバーに退避すれば、あとは物理サーバーを再インストールし、kvm 対応にするだけだ。



しかし「難しくない」としても、時間はかかりそうだ。

計画開始から1年たつ前に終わらせたい。



▲目次へ ⇒この記事のURL

関連ページ

パソコン壊れた【日記 19/05/05】

別年同日の日記

02年 4/17

17年 アメリカが日本製のパソコンに100%関税をかけた日(1987)


申し訳ありませんが、現在意見投稿をできない状態にしています

micro:bit 買った  2019-04-19 17:46:17  コンピュータ 歯車

▲目次へ ⇒この記事のURL

小6になった長女が、学校で蛍光ペンを使うらしい。


5色セットで色の指定まである。そこまで細かいと、店に行っても置てあるとは限らんぞ…

と思い、Amazon で買うことにした。


そうしたら、一番よさげなものが「あわせ買い対象商品」で、2000円分買わないといけない。

蛍光ペンは 300円なのに。



と、前振りが長いのだが、ちょうど 2000円で買える子供用コンピューター、「micro:bit」を買った。

以前から興味はあったけど、遊ぶ暇がないから買ってなかったやつ。




micro:bit に関しては、発売前に少し触れている

もっとも、発売前は BBC Micro Bit という名前だった。


イギリスでは、1981年に、国営放送である BBC が BBC Micro というコンピューターを発売している。

その「後継」というか「再来」というような位置づけだ。


子供全員が持てるように、安いけれど十分な機能を備え、単体で動くコンピューターとして作られている。




いろいろ説明しようと思ったのだけど、書いてみたら長くなったのでやめておこう…

先行する「小さなコンピューター」である、Arduino / Raspberry Pi / Ichigo JAM と比較して、それぞれの特徴を書こうと思ったのだ。


特に Raspberry Pi 。

micro:bit と同じ、イギリス生まれの子供向けコンピューターだ。


これとの衝突は、絶対避けなくてはならない。

1981年の BBC Micro では、商売が「衝突」したイギリス国内の企業から、「国が民間企業の邪魔をするのは違法行為だ」と訴えられたのだ。



しかし、使ってみてわかった。micro:bit は、Raspberry Pi とは違う市場を見つけ出し、見事にすみ分けている。

それどころか、「併用すれば楽しさが広がる」ような世界を作り出している。



Raspberry Pi は小さなデスクトップパソコンで、micro:bit は「プログラムが楽しい周辺機器」なのだ。

だから併用しても構わないし、守備範囲が違う。


残りの二つ、Arduino と Ichigo JAM については詳しく書かないが、ここら辺とも違う環境になっている。




話を micro:bit に戻すと、「思ったより楽しい」。

もっと早く買えばよかった。



単体でプログラムできる環境、というより、「スマホのセンサー部分だけ取り出した」という感じだ。

これは、先に書いた3機種にはない、micro:bit だけの特徴だ。



加速度センサー、地磁気センサー、明るさセンサー、接触センサーなどを備えている。

簡単だが、表示デバイスもあるし、2つのボタンもある。



ボタンが2つしかないので、ゲームを作るのにはちょっと辛い。

上下左右を加速度センサーによる傾き検知で行う、という作法で作られるものが多いようだ。

しかし、この方法は操作性悪い。


従来の方法論にとらわれない、新しい発想が必要なのだろうな…

スマホゲームとかでも、画面上のボタンを推させるような方法で既存ゲームを真似するのは使いにくいだけ、というのと同じ。




とりあえず、まだ暇がなくてあまりいじっていない。

5x5 しかない表示画面でもでもテトリスくらいは作れそうだ、と思ったら、すでにテトリスは作っている人がいた。


パックマンも。…作れそうなゲームは、すでに軒並み作られているのかな。


まぁ、人が作っているとしても、練習で自分でも作ってみればよいのだけど。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

歯車

別年同日の日記

02年 4/19

05年 網戸ついた

06年 大玉

17年 地図の日


申し訳ありませんが、現在意見投稿をできない状態にしています

Amazon Fire HD 10 購入  2019-04-26 18:29:13  コンピュータ 歯車

▲目次へ ⇒この記事のURL

Kindle Fire だと思っていたけど、いつのまにか Kindle は外れて、ただの Fire に名前変わっていたのね。



表題通り、Fire HD 10 を購入した。

少し前にセールで値下げしていて、1万980円だった。


実は、我が家では未だに Nexus7 (2012) が現役で稼働していた。


発売時点で、すでに2年前のハード、と言われていたマシン。

でも、当時としては悪くない性能で、何よりもとても安かった。


その後、ハードウェアが高速化すれば、そのうえで動作するアプリも、高速処理を前提としたものになる。

今となっては遅すぎてストレスのたまるマシンだったが、朝の Radiko 専用端末としては十分に使えていた。



我が家では、朝はテレビを見ない。子供たちがテレビを見入ってしまうと朝ごはん食べるの遅くなるから。

そこで以前からラジオを付けていたのだが、1年前にキッザニアに行ったときから、子供たちが J-wave に興味を持つようになった。


しかし、鎌倉では J-wave の電波は入りにくい。

自然と Radiko を使用するようになり、Nexus7 は Radiko 専用機となっていた。




しかし、その Radiko も、少し前にアプリがバージョンアップしたのだ。

…いや、この新アプリは、対応する OS バージョンの問題で、Nexus7 には入らない。

だから、アプリが重くなるようなことはない。


しかし、動作が重くなったのだ。

Radiko アプリは、多くの情報をネットワークから取得する。

どうも、アプリ更新と同時に、その元データの量が増えたのか、動作が遅くなってしまったのだ。



これはさすがに買い替え時だな、と思った。それなら、以前から興味あったから Fire HD 10 が欲しいな、と思っていた。

しかし、事実上 Radiko だけ聞ければいいマシンに1万5千円かぁ…と躊躇していたら、ちょうどセールが来た。


そんなわけで、買ってしまったのだ。




というわけで、前振りが長かったけど使用レポート。


断っておくが、Fire HD 10 は、2017 年に発売されたマシンだ。

それも、Nexus7 と同じように、「安いマシン」を目指して作られているので、発売時点で2年前の性能だった。


だから、1万円と激安ではあるが、その性能は 2015年の最新スペックくらいだと思っていい。

そして、2017年に発売されたものなので、今更使用レポートを書いたところで、誰かの参考になるとも思えない。


あと、Fire HD の「前世代機」は、2015年発売だった。購入したのは 2017年発売モデルで、今年は 2019年だ。

セールで安くなっているのも在庫処分の予感がするし、性能が良い機種が欲しい人は慌てて買わないことをお勧めする。


その一方で、新機種が出れば値段は上がるだろう。

Amazon では定期的にセールを行っているし、1万円で使い勝手の悪くない機械が欲しいのであれば、次のタイミングを狙うといいかもしれない。



なお、我が家にはすでに関連商品として Fire TV Stick がある。

ずっと第1世代を使っていたが、先日やはりセールで安かったタイミングで第2世代に乗り換えた。


数年来 Amazon prime 会員で、多くのビデオが見放題なので、子供とアニメを見たりしている。

僕は主夫を標榜しているので家事もほとんどやっているが、家事をしながらスマホでもアニメを見ている。


#別にアニメ好きなわけではない。むしろ、子供が生まれる前はアニメ嫌いだった。

 しかし、家事の合間に見るにはちょうど良い長さなのでいろいろなアニメを見るうち、すっかりそういう生活になってしまった。




購入する際には、カバーを一緒に注文した。

10インチタブレットは大きいので、家事の合間にビデオを見ようと思ったら、なにか「立てる」手段が必要だ。


スマホで観ていた時には、小さな台を使っていたが、10インチではとても使えないだろう。


純正カバーは、縦にも横にも立てられるスタンドとしての機能がついている。しかしおよそ5千円もする。

本体が1万円なのに、ちょっと高すぎる。


しかも、この「立てる」機能が微妙で、立てる面が滑りやすいとうまくたたない…というレビューも散見する。


サードパーティ製で、1500円のカバーがあって評判が良い。

横置きでしか立てられない代わりに、2通りの角度に使える。


こちらを購入。




商品が届いて驚いたのは、入っているのが「箱」ではなく、しっかりした素材の「紙袋」だったことだ。


もう一度しまって置いておく、というようなことは考慮されていない、破いて開ける紙袋。

使い捨て、と言うと語弊があるが、しばらく使い倒したら買い替える、そういう商品だということだろう。


元々、購入時にそういうつもりだった。だから、今回画面保護フィルムなどは買っていない。

カバーはあるので鞄に入れて持ち運んでも大丈夫だろうし、そもそもそれほど家から持ち出さないつもりだから。



そもそも、Fire HD 10 には、SIM が刺さらない。

モバイルでの電波は使用できず、WiFi があるところでしか使えない。


今まではスマホの Prime Video アプリを使っていたが、これも WiFi が前提だ。

一応モバイルの電波でも見られるが、WiFi のある場所でビデオをダウンロードして、外で観たいときはそのデータを見る、という作法になっている。


そうした性格のものなので、Fire HD 10 には GPS も、地磁気センサーもついていない。

持ち歩くようには考えていないのだ。



一方で、Amazon がこれから力を入れたい、Alexa が使用できる。

(英語版は以前から使えたそうだが、日本語版は最近対応したばかりだ)


こちらも WiFi を前提として、ほぼすべての処理をネットワーク越しに行うものだ。



タブレットだけど、モバイルではなく、家の中で使うもの。

Fire HD 10 は、そうした設計のマシンだ。

ここを見誤ると、1万円でも「高い買い物」となってしまうだろう。




さらに言えば、Amazon Prime などの会員になっていて、Amazon のサービスを使いたい、という人向けに作られている。


Amazon の各種サービスのアプリはインストール済みだが、それだけでなく、ホーム画面で直接「おすすめのビデオ」「おすすめの本」などが表示されるようになっている。


さっき見ていた続きもすぐに見始められるし、今までの視聴履歴からのおすすめも出る。

それらをタップすれば、適切なアプリが起動する。だから、アプリアイコンは並んでいるが、あまり使う機会はない。


逆に「安いタブレット」として購入したいだけで、Amazon のサービス会員になっていない人にとっては、無意味なオススメばかりされる使いにくい端末だろう。



「ホーム画面」と書いたが、一応 Android 端末だ。

Android 端末では、ホーム画面もアプリの1つにすぎないため、入れ替えれば普通の Android として使用できそうに思う。


…が、そうした夢は見ない方がいい。


Kindle Fire HD には、Google Play store アプリがインストールされていない。

だから、普通の Android アプリはインストールできない。


一応、Amazon App Store からのインストールはできるし、有名な Android アプリなどはこちらにも結構登録されている。

しかし、バージョンが古かったり、機能限定版だったりすることも多い。Android として使おうとは思わない方がいい。



それでも使いたいときは…実のところ、Google Play アプリをインストールすることは可能なのだ。

Amazon の WEB ブラウザである「Silk」が入っていて、探せば WEB からアプリをダウンロードし、インストールできる。



しかし、そこまでやっても、Android 5.1 相当で、しかもこれはカーネル(OS の中核部分)が入っている、というだけの話だ。

(現在、Android の最新バージョンは 9 だ。5.1 は、Nexus 7 の時代の OS だ)



Android なら当たり前に入っているはずの周辺サービスが入っていない。

そうしたサービスを前提とするソフトは、たとえインストールできたとしても、動かない。



Fire HD 10 は、あくまでも「Fire OS」のタブレットであって、Android ではない、と思っていた方がよいだろう。




とはいえ、購入して最初にやったのは、Google Play と Chrome を導入することだった。


最初に書いた通り、Radiko を使いたかったのだが、Amazon App Store で配布されている Radiko は、お話にならないほどバージョンが古く、機能が限定されるのだ。



これは、無事入った。Android 端末としての期待はしないとしても、「使えないことはない」というのは安心感をもたらす。



次にやってみたのは、Prime Video の視聴だったが…

これは、ちょっといただけない。


画面は大きくて非常にきれいだし、内蔵スピーカーの音もよい。この点文句は何もない。


しかし、僕は家事をしながら見たいのだ。家族が寝ている時間に見ることもあるため、Bluetooth イヤホンは必須なのだ。


その Bluetooth に、非常に雑音が乗る。


実は、これは古い Android には普通にあったバグで、どうも配信用に圧縮された音声を展開し、Bluetooth 通信のために再度別の形式に圧縮する過程でノイズが乗ってしまうのだ。

そのため、Bluetooth オーディオを使用しなければ問題はない。


これが、静かな時ほど大きなノイズが乗る。

「常に軽いノイズがあるが、静かだと目立つ」というようなヒスノイズとも違う。

明らかに、静かな時だけノイズが乗るのだ。


#静かな時と書いたけど、より厳密には「音の周波数成分が単純な時」。

 オルゴール曲が流れるようなシーンでもノイズは大きくなる。

 圧縮アルゴリズムを知っていると、バグの原因がなんとなくわかる感じ。



このノイズ、そういうものだと我慢できないこともないが、非常に残念なレベルだ。

Android のベースバージョンが古いことが、こんなところで足枷になっている。



次に、Prime で読める本を読んでみる。

そういうサービスがあるのは知っていたし、実は Kindle Paper White も持っているのだけど、あまり活用していなかった。


それが、Fire OS のホーム画面「おすすめ」機能で、無料で興味がありそうなものを勧めてくれるのがちょっとうれしい。



ここで、同時購入したカバーについて言及。

表紙を開いたときに、3つ折りで「三角柱」を作ってスタンドにできるものなのだけど、その柱を下に持ってくるか、上に持ってくるかで角度を2段階に調整できる。


(タブレット本体は、反転した形になる。ボリュームや電源などのボタン類は、縦置きの時に一番上の辺に集中しているので、横置きではどちら向きにおいても問題ない)


この2段階が、角度を「立てた」時にはビデオ視聴にちょうどいいし、「寝かせた」時には、本を読むのにちょうどいい。


三角柱を作った際には、カバー内に内蔵した磁石がうまくくっついて、それなりの力に耐えてくれるのもよくできている。


レビューでは純正カバーより評判が良い感じなのだけど、納得した。




漫画を読んだのだが、横画面にして、2ページ見開きでも十分に文字が読める。

もちろん、細かな部分などを見たければ拡大もできる。


普段スマホで漫画を読んでいるが、縦画面で1ページ表示でも、文字を読むためには拡大しないといけない感じ。

読書端末としてはかなり使いやすい。



気をよくして、「マンガ Park」アプリをインストールしてみた。

白泉社の漫画が1日に8話づつ無料で読めるアプリで、普段使わせてもらっている。


…残念ながら、このアプリは縦画面専用だった。見開き表示はできない。

しかし、拡大しないでも文字が読めるのはありがたい。




Alexa を試してみる。


google の音声認識である「OK google」は、スマホで使用する場合はまず何らかの方法でスリープ解除してからでないと使えない。

(場合が多い。スマホにもよるだろうが、実際この程度で解除できてしまうとセキュリティ問題があるだろう)



スマートスピーカーは当然音声だけで操作できるが、あれは「家庭内」に使用できる場所を限定していて、セキュリティ問題が出にくいからできるのだ。


そして、Fire HD 10 の Alexa は、スリープしている状態からでも使用できる。

こちらも、持ち歩かないことを前提にしているから、ということなのだと思う。


カバーを閉じていて画面が見えないときは、本当にスマートスピーカーと変わらない。




せっかく Radiko アプリを入れたのだけど、「アレクサ、J-wave 再生して」と言えば、J-wave を聞かせてくれた。


Alexa で機能追加するアプリのことを「スキル」と呼ぶのだけど、Radiko はスキルとしても提供されている。

初めて機能を使おうとしたときに、スキルを使ってもよいか聞かれるので承認すればいい。



この Radiko スキル、実はレビューではかなり評判が悪い。

「J-wave 再生して」と言っても、わざわざ「J-wave を再生しますか?」と聞き返してきて、「はい」と答えないと再生してくれない。

再生中にボリュームを変えようとすると終了してしまう、Radiko の機能のすべて(タイムフリーなど)を使うことはできない、などなど。


しかし、単に現在の放送を聞きたいだけ、というのであれば、使い勝手は悪くなかった。


特に、先に書いたように朝の食事の際に聞きたいので、配膳しながら指示を出せるのは便利だった。

しばらく使ってみて、不便な点があればアプリを使うようにしよう。

 



Alexa に何か頼む、というのはなかなか面白いようで、子供が「天気教えて」とか「今何時?」とか、いろいろやってみている。

しかし、今のところうまく認識されない、と笑っているレベルで、実用にはなっていない。


そもそも、家族がいる部屋の中で「アレクサ!」って急に言い出すのは恥ずかしい。

この機能は、1人暮らしの人には評判が良いようだが、我が家での使いどころを見つけるのはもう少し時間がかかりそうだ。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

歯車

関連ページ

Nexus7 (2012) 復活【日記 19/05/20】

別年同日の日記

15年 ピューロランドで誕生日

18年 ST-V事業のテコ入れ


申し訳ありませんが、現在意見投稿をできない状態にしています

ServiceWorker と indexedDB  2019-05-03 12:36:56  コンピュータ

▲目次へ ⇒この記事のURL

「ゴールデンウィーク明けにはリリースしたいので、その前までにお願いね」


と言われていたプログラム改良があった。

その改良は、ちゃんと四月半ばまでに仕上げた。


WEB ブラウザ側で動く Javascript のプログラムだったのだけど、同時にサーバー側も変更することになっていた。

サーバー変更は僕の仕事ではなかったのだけど、そちらが間に合っていない。


急遽、Javascript 側で何とかできないかと、ゴールデンウィーク直前に ねじ込まれた。




目的は、URL の一部隠蔽だ。

ブラウザ側プログラムの改良により、画面遷移が一段階へり、目的画面の URL が変わることになった。

この URL にはセッション情報が含まれており、見えているのが好ましくない。


そこで、セッション情報を URL に入れるのではなく、POST にするか、Cookie にするなどして、消すことになっていた。

つまり、これらはサーバー側の改良だ。


それができなくなったので、Javascript 側でどうにかならないか、というのが、追加の依頼だった。

セッション情報はややこしい文字列になっているので、長い時間表示されているのでなければ、一瞬なら出てもよいという。


つまり、セッション情報付きの URL でアクセスしてから、取得したページの Javascript の中ですぐに URL を変更し、消せればいいということだ。


ただし、該当ページは都合上、時々リロードする場合がある。

セッション情報なしではサーバーにアクセスできないので、リロードする際にはすぐに URL を元に戻したい。




URL を変更するのは簡単だ。history.replaceState 関数を使うと、現在アクセス中として表示されている URL を変更することができる。

いわゆる ajax …画面遷移を伴わないサーバーアクセスを行うようなプログラムで多用されているテクニックだ。


だから、セッション情報がない URL にすることはできる。

この時に、本来の URL を変数に保存しておいて、リロードの際に元に戻せればいいだろう。



しかし、javascript に「リロードイベント」というのは存在しない。


#イベントとは、「何かが起きた」とプログラムが知ることができる、概念上の存在。

 Javascript では、特定のイベントに対してプログラムを紐づけることができ、紐づいたプログラムは、イベントが起きると自動的に実行される。

 これにより、イベントが生じたらプログラムを動かす、ということが可能になっている。



リロードされたかどうかを知る方法はあるのだが、それはリロードされた「あと」のページで検知できるだけだ。


そして、リロードの際には表示している URL にアクセスが行くので、そのままではセッション情報がないためにサーバーから拒否される。

リロード「あと」のページの表示自体が行えない状態で、リロードに伴う不都合をこの方法で解消することはできない。



「ページが終了した」というイベントはある。unload イベントだ。

しかし、Javascript プログラムの寿命は、そのページが終了するまでだ。


そのため、unload イベントにプログラムをセットしておいても、実行されることはない。



実行されないんじゃ意味ないじゃん、ってことで、beforeunload というイベントもある。

「unload の直前」というイベントだ。


よく、「ページを離れてもいいですか?」というダイアログが表示されるのは、このイベントの時に動くプログラムによるものだ。



このイベントは、次にアクセスする URL が決定し、新しいページの取得準備が整うと呼び出される。

つまり、このイベントの中で URL を書き換えても、すでに URL は決定していて意味がない。


このイベントでできることは、新しいページへの移行を中断し、今のページに居続けるかどうかをユーザーに問いかける、ということのみだ。




そんなわけで、ブラウザ側の Javascript で解決するのは無理とわかった。


でも、まだ最後の望みがあった。

一般に「ブラウザ側の Javascript」というのは、WEB ページに付随するものだ。


しかし、最近のブラウザには、WEB ページではなく「ブラウザに」Javascript を登録し、動かす方法があるのだ。



ServiceWorker という。


Chrome/FireFox では早くから実装され、便利なので使いたいプログラマも多かったのだけど、Safari ではなかなか実装されなくて使いどころが限られていた。


昨年、やっと Safari も対応したので、使われる局面が増えてきている。


これを使うと、WEB ページがサーバーに問い合わせた瞬間に、そのリクエストを横取りして、Javascript がサーバーの「ふりをして」返事を返したりできる。


だから、オフラインなのにキャッシュしておいたデータを渡したり、逆にサーバーにデータを送ろうとしたときにキャッシュしておいて、あとでオンラインになった時にこっそり送信したりできる。


Google Docs がオフラインでも使えるのはこの仕組みを使っているからだ。


Android では、この仕組みを使って WEB ページを「アプリ化」することもできる。

WEB ページに行くと「このページをインストールしますか?」と促され、インストールを選ぶとホーム画面にアイコンが現れる。


このアイコンをタップすれば、いつでも WEB ページが提供する機能を使える。

Google Docs の例と同じように、適切に処理されていれば、オフラインでだって使える。



Service Worker の利用例は、多くは「WEB を オフラインでも使えるようにする」のと、それをさらに拡張した「アプリ化」だ。

だけど、先に書いたように、サーバーへのリクエストを横取りして、いろいろなことができる。

キャッシュデータを渡してオフラインでも動くようにする、というのは代表的な応用例にすぎない。



これなら、リロードの問題を解決できそうに思えた。

…一筋縄ではいかなかったのだけど、実際解決できた。




基本戦略はこうだ。


・WEB ページ側で、history.replaceState を使って URL を一部削除。

 同時に、削除前の URL を ServiceWorker に渡して、データ保持。


・サーバーへのアクセスが生じた際、それが URL を一部削除したものだと判明したら、

 保持していた本来の URL にアクセスし、そのデータを WEB ページ側に渡す。



実験過程を端折るが、実際にこの流れを作ったらうまく動かなかった。

WEB ページ側で動いている Javascript は、内部でセッションデータを使用していたのだ。

(僕は途中から参加して改良してきただけなので、そうした部分があるのを知らなかった)


だから、サーバーアクセスの際の流れを少し変えることにした。


・サーバーへのアクセスが生じた際、それが URL を一部削除したものだと判明したら、

 保持していた本来の URL にリダイレクトする指示を作り出し、WEB ページ側に渡す。


リダイレクトが挟まるので、WEB ページ側としては少し動作が遅くなってしまう。

しかし、一度本来の URL に戻ってからリロードすることになるので、内部で動作するプログラムでも

URL に入れたセッションデータを使えることになり、問題は出なくなる。



さて、実際に作る上では、いくつか問題があった。

一番重要なのが、Javascript の生存期間だ。


WEB ページでは、そのページが存在する間、Javascript が生存する。

変数などもこの間は保持されるので、データ保持も変数に入れればよい。


しかし、ServiceWorker では、生存期間の考え方が二つあるのだ。



先に書いたように、ServiceWorker はブラウザ側で動き、WEB ページが閉じられても残り続ける。

しかし、それは「残っている」だけで、生きているわけではない。


じつは、必要な時に動作し、動作を終わるとすぐに終了してしまうのだ。

「データを渡す」という動作があったとしたら、その動作が終わった瞬間に終了し、変数は消える。


その後、「サーバーアクセス」という動作があり、動き始めたときには変数は存在していない。


だから、変数ではない方法でデータを保持しないといけない。




ServiceWorker は非常に強力な仕組みなので、悪さができないように厳しい制限が課されている。


データ保持方法としては、indexedDB しか使えない。

古くから知られるデータ保持方法には、Cookie や webStorage があるが、それらよりも新しい仕組みだ。


まぁ、それしか使えないのであれば、それを使おう。


…これが、イベントで動作する仕組みになっていて使いにくい。

DB に接続する、という指示を出すと、少し後で「接続成功」というイベントが起きる。

だから、接続成功イベントに、接続後のプログラムを登録しておく。


接続後には、アクセスしたい対象を指定してから「データ取り出し」を指示する。

しかし、データはすぐ取り出されるわけではない。少し後で「取り出し成功」イベントが起きる。


だから、ここでもイベントに対してプログラムを登録しておく必要がある。

非常に面倒くさい。

しかし、他に方法はないのでその方法でプログラムを組む。



ところが、もう一つ問題があるのだ。

ServiceWorker 自体は、こうしたイベントによって動くモデルではないのだ。


いや、先に書いたように「サーバーへのアクセスが生じた」などのイベントはある。

でも、Javascript ってとにかく「何かしたら後で呼び出して」という書き方が多くて、ここ数年で新しい書き方が取り入れたのだ。


そして、ServiceWorker は、基本的にその書き方で書かれないといけないようになっている。




この書き方は Promise というやつで…


この概念の歴史から入ろうと思ったが、無駄に長いのでやめた。

同時に、概念だけ説明するのも同じくらい長くなるのでやめた。


ともかく、概念自体は古いとはいえ、10年たっていないのではないかな。

Javascript の言語仕様に取り入れられたのは、2015年なので、4年程度しかたっていない。


しかし、便利なので、これまでイベントモデルで作られていた Javascript が、最近は Promise モデルで機能追加されるようになってきている。

上に書いたが、ちゃんと理解していないと混ぜて使えない。



ちなみに、Promise の概念の前に Deferred があり、こちらのことは以前に書いたことがある

微妙に違うとはいえ、概念的に慣れていたのですぐに…でもないけど、1日程度で理解できた。





そんなわけで、同じことで悩んでいる人にとっての「答え」を示そう。


ServiceWorker では、fetch (URL アクセス)イベントに対して、最終的な「返事」を event.respondWith として返せばよい。

ここで、返す内容は Promise でなくてはならない。


Promise は、resolve を引数とする関数として定義される。

resolve はコールバック関数であり、Promise の処理終了時には、resolve を呼び出してやらなくてはならない。


この時、resolve には、「結果」を引数として渡す。

通常の関数における、return と同じような感じで、何が結果になるのかはその時の処理内容による。


respondWith は、URL アクセスに対する答えを返す関数なので、答えは http の Response となる。

これは Response クラスとして定義でき、リダイレクトしたいなら headers の Location に URL を渡せばよい。

(http と同じだ)



以上の「きまりごと」さえ守れば、あとはどんな書き方をしようとも自由だ。

関数内部で indexedDB のイベント呼び出しをたくさん定義しても構わない。


僕が仕事で必要だった関数の場合、次のようになった。


self.addEventListener('fetch',function(event){
  let url = event.request.url;

  let param = url.match(/targetDirectory\/([0-9]+)(\?session=)?/);
  if(!event.isReload || !param || param[2])return;

  event.respondWith(new Promise(function(resolve){
    let openReq = indexedDB.open('targetDB');
    openReq.onsuccess = function(event){
      let db = event.target.result;
      let trans = db.transaction('fullURL','readonly');
      let store = trans.objectStore('fullURL');
      let getReq = store.get(param[1]);
      db.close();
      getReq.onsuccess = function(event){
        let redirectResponse = new Response('',{
          status: 302,
          statusText: 'Found',
          headers: {
            Location: event.target.result.url
          }
        });
        resolve(redirectResponse);
      }
    }
  }));
});


説明しておくと、/targetDirectory/123?session=**** というような URL が隠蔽対象だ。


リロードにより fetch イベントが起きているときは、すでに隠蔽されて ?session= 以降はなくなっている。

しかし、初回アクセス時や、リダイレクト直後は ?session= 以降もついているので、判別して処理を変える必要がある。


そして、123 の部分の数値はページの分類を示していて、ブラウザの複数のタブで開かれる可能性がある。

それぞれでリロードしたときに混乱しないように、123 を DB のキーとして、元の URL を格納してある。


#格納部分のプログラムは別途必要。そちらは Promise と無関係に書けるので、それほど難しくない。



…というわけで、URL を検査して、隠蔽されていない場合はそのままアクセスを通す。

隠蔽されている場合は、123 にあたる部分をキーとして DB を検索し、得られた URL へのリダイレクトを生成する。



ちなみに、僕の要件ではリダイレクトが必要だったが、URL を差し替えてそのままサーバーにアクセスしたい、という場合もあるだろう。


実はそちらの方がプログラムは簡単で、redirectResponse を生成せずに、


resolve(fetch(event.target.result.url));


としてしまえばよい。




ここで重要なのは、


・fetch イベントに対する反応は、すぐに返さないといけない。

・event.respondWith が呼び出されれば、そこで帰ってくる反応を待つ。

・呼び出されなければ、本来の URL に対してアクセスを行う。


ということだろう。


respondWith は「結果を返す関数」ではなく、「結果を返すと約束する関数」だ。

結果を返すものだと思って、結果が出てから呼び出そうとすると、「fetch に対して respondWith が返されなかった」ことになり、本来のサーバーにアクセスが行ってしまう。


そして、結果を返すと約束するのだから、返すのは Promise (約束)だ。

Promise は、最終的に resolve として渡される関数を呼び出しさえすれば、その内部でどれほどの時間がかかっても構わない。


だから、時間がかかる indexedDB の処理は、この Promise 内部で行うようにする。




…ただこれだけのことだ。

プログラム例を示したら、なんてことのない、当たり前に見えるコードだろう。


けど、こういう例がネットを探してもなかなか見つからないんだ。

ServiceWorker というと、「キャッシュを使ってオフラインでも動作するようにしましょう」ってお決まりのパターンばかりで。


#ちょっと気が利いた例では、簡単な文字列を「WEB ページ」として生成して返したりする実験をしていた。

 しかし、indexedDB を使って何かのデータを返すような処理を見つけることはできなかった。


この日記が、同じような処理をしようとしている人の助けになれば幸いである。



▲目次へ ⇒この記事のURL

関連ページ

Programming Tips

別年同日の日記

02年 5/3

04年 しばらく日記を書いていませんでした

04年 知恵の輪

04年 天然温泉

04年 ハードディスクの温度

04年 ピクミン2

04年 携帯のことも書いとこう

05年 よきライバル?

06年 ゴールデンウィーク


申し訳ありませんが、現在意見投稿をできない状態にしています

Minit  2019-05-04 18:12:17  コンピュータ

▲目次へ ⇒この記事のURL

ゴールデンウィーク前の話なのだけど、ニンテンドーポイント(ゴールド)が4月末に失効するよ、というお知らせが来た。


何か買ったりすると付くポイントで、ゴールドは1ポイント=1円で任天堂商品の購入などに使うことができる。


ちなみに、プラチナポイントというのもあるのだけど、こちらはゲーム内でバンバン配布し、ゲーム内以外ではあまり使い道がないゴミみたいなものだ。


で、失効するゴールドポイントは 150ポイントだったのだけど、せっかくなので全保有ポイントを調べたら 937ポイントあった。

500円程度のダウンロード販売のゲームを買ってもよいかも。いや、少しお金出して 1000円くらいのものを買った方が楽しめるか。




というわけで、いろいろと悩みながら「Minit」というゲームを買った。


Switch 版は昨年夏に発売になっているし、それ以前に PC 版で販売されている。

だから「今更」感のあるゲームだろう。


しかし、なかなか面白かった。

というか、一通り解き終わった後で「これからが本番だ」と気づき、今一生懸命遊んでいる。



まずはゲームの説明だ。

ネットを探せば宣伝動画などもあるので、そちらを見たほうがわかりやすいけど。



まぁ、初代ゼルダの伝説タイプのアクション RPG だと思いねぇ。

ただし、主人公は呪われていて、60秒たつと死んでしまう。


死ぬとセーブポイントから再スタートになるが、死ぬ直前までに「世界に影響を及ぼす」行為をしていた場合は、その影響は残ったままになる。



以上。シンプルだが、それだけのゲームだ。

ゼルダと同じように、画面切り替え型で広い世界を探検する。

ゼルダと同じように、剣を前に突き出して敵を倒したり、障害物を壊したりできる。


ゲーム画面は白黒のドット絵だ。ゲームボーイみたい、というとほめすぎ。

ゲームボーイは白黒4階調だったから、このゲームの画面よりももっと美しい。


しかし、この白黒画面が、ゲームを面白くするためによく考えられているのだ。




60秒で死ぬまでに、世界に影響を及ぼせばいい。

だから、ひたすらいろいろなことを試してみて、何が起きるのか探す必要がある。


洞窟を見つけて入ってみるが、真っ暗で何もわからない。

どうやらライトが必要なようだが、どこにあるのかわからない。


灯台を見つけたが、鍵がなくて入れない。冒険していたら鍵を手に入れ、灯台に上ってみたらライトが置いてあった。


世界に影響があるのは、上の例でいえば「鍵を手に入れる」「ライトを手に入れる」など。

基本的に得たアイテムは死んでもなくならないし、切り開いた道などもそのままになる。


一方で、倒した敵などは死ぬと復活する。動かせるものも、死ぬと元の位置に戻ることが多い。


何よりも一番影響があるのは、「セーブポイントに入る」ことだ。

基本的には、ベッドが用意された家がセーブポイントになっていて、死んだときは「最後に入った」セーブポイントに復活する。


世界には何カ所かのセーブポイントがあり、そこを中継地点とすることで広い世界をくまなく冒険することができる。



このゲームの中にはパズルが多く、障害物の動かし方などに失敗すると詰んでしまうことがある。

また、袋小路の行き止まりもあり、そういう場所にはアイテムが置かれているのだけど、アイテムを取った後脱出することができない場合がる。


まぁ、時間切れになれば死んでセーブポイントに戻るのだけど、B ボタンを押せばいつでも自殺できる。

この「自殺」は、遊び方によっては非常に重要なポイントになる。…ようだ。




さて、先に「白黒画面がゲームを面白くする」と書いたのだけど、白黒でも古臭い感じはしない。

アニメーションがやたらと滑らかだからだ。ファミコンやゲームボーイの時代なら、こんな滑らかなアニメーションは作れなかった。


しかし、色がない、ドットも荒いというのは、情報が極端に少ない。

…ここが重要だ。世界を冒険するときに、初めて見たものの意味が分からないのだ。


もしくは、意味が分からないがゆえに、「そこにあるものが見えていない」ともいえる。

意味が分かるのは、それが重要アイテムだと認識されて以降だ。


つまり、このゲームは世界に影響を及ぼすためにアイテムを捜し歩くゲームなのに、そのアイテムは入手するまで「見えていても気づかない」ことが多い。


なんて巧妙な隠し方だろう。

ちゃんとヒントを見せているにも関わらず、それがヒントだったとわかるのは謎を解いた後なのだ。



「こんな隠し方、わかるわけないよ! 不条理だ!」と怒りたくなるのはクソゲーの条件だし、そう怒りたくなる場所が随所にある。

しかし、あとで見直してみると、明らかにわかるように置いてあるのだ。気づかなかった自分が悪い、と納得するより他にあるまい。


ちなみに、もし気づかなかったとしても、あまり問題はない。

必須アイテムは比較的楽に入手できるようになっていて、巧妙に隠されているのはコンプリートを楽しむオマケ要素だから。




ところで、このゲームのとあるところに、謎のメッセージが置かれている。


???

???

???


と、ハテナマークが並んでいるだけなのだ。


一度クリアした後、続きを遊び始めた。

アイテムのコンプリート要素があるので、ゲームをクリアした後でも、そのセーブデータで遊び続けることができる。


そこで気づいた。一番上の ??? に、「ノーマル:243」って入っている。


ん? これはなんだ? その時は気にせず遊んでいた。

そして、アイテムコンプリートが難しいので、気を取り直してもう一度最初から遊んでみた。



最初から遊びなおした理由は、設定画面の中に「スピードラン」という項目があるからだ。

初期設定では OFF になっているが、ON にしてゲームを始めると、ゲーム開始からの1/100秒単位の通算時間カウントが画面上に表示される。


つまり、これはやるべきことを効率よくやって、タイムアタックをするゲームなのだな、と認識したのだ。



2回目は、謎を全部知っているので35分ほどで終了することができた。

(ちなみに、最初のプレイは1日1~2時間で1週間程度、通算では5~6時間くらいかかっていると思う)


で、そのあと気づいた。??? に書かれていた 243 が、44 に減っている。

この 44 というのは、クリアまでに「死んだ回数」だ。



ここでやっと気づいた。

このゲーム、スピードランもできるけどそれはオマケ要素で、作者が一番やってほしいのは「少ない死に回数でクリア」なんだ。




現在死に回数を減らすべく、冒険の手順を組み立てている。

1分間にできるだけ多くのことを詰め込まなくてはならない。


最初の一分は何度もやったので、もう動きが確定している。

先ほど書いた例の「灯台に上ってライトを取る」ところまでは、最初の1分で可能だ。


ちなみに、初回プレイではそこまでに10回以上は死んでいたと思う。


それ以降は、大まかにやることは決まっているのだけど、まだ無駄のない動きというのがわかっていない。

現時点でのベストスコアは21回だけど、まだ無駄が多いので20回を切るのは余裕だろう。


最終的にどのくらいまで切り詰められるのかはまだ見えていない。



そして思った。

この作業、ピクミン1の楽しかった部分だ


やるべきことはわかっている。

でも、手順の一部には前後の入れ替えが可能な部分がある。


そうした部分を調整しながら、区切られた時間を最大限に使う方法を考える。

小さなパズルを解き、その答えを大きなパズルの一部としながら、大きなパズルを完成させていく。

状況次第では、小さなパズルの答えを一度壊し、再度組みなおすことで大きなパズルがより完成に近づく場合もある。


ピクミンと違い、途中までできたところでセーブデータをコピーして保存して次に挑む、ということができない。

最後まで通しでやらないといけない「一発勝負」なので、解き方は再現性が高い、偶発性を排除した方法であるのが望ましい。


一方で、ピクミンと違い、全部通してやっても30分以内だ。

気軽にチャレンジしやすい。何度も繰り返すことで見えてくる攻略もあるだろう。




実はこのゲーム、ハードモードもあるのだけど、まだハードモードはクリアしていない。

ハードモードは、名前の通りハードだ。難しい。

ノーマルモードの徹底攻略と、ハードモードのクリアのどちらを優先すべきかわからないのだけど、とりあえず「楽しい方」を遊んでいる。



▲目次へ ⇒この記事のURL

別年同日の日記

13年 記事の更新


申し訳ありませんが、現在意見投稿をできない状態にしています

続:Minit  2019-05-08 18:01:10  コンピュータ

▲目次へ ⇒この記事のURL


先日、Nintendo Switch 用ゲーム Minit の話題を書いた。

ゲーム的には「初代ゼルダの伝説のような」ゲームなのだけど、クリアしてみて、これはピクミンのように「ゲーム中での最短時間を目指すものだ」と思った。


ピクミンは、「1日」の概念があるゲームで、その日の終わりにはすべてを終了して撤収する必要があった。

その状況下で、できるだけ少ない日数でクリアを目指すゲームだった。


それに対し、Minit は「1分」で強制的に作業が中断され、スタート地点に戻されてしまう。

ゲーム終了時に、スタート地点から出発した「スタート回数」が表示されるので、この回数を減らすことを考える。




まずはヒントなしで…と頑張って、冒頭に書いたスクリーンショットを得た。

12回。もっと減らすことができるポイントはわかっているのだが、それをやるのはかなり難しそうに思う。

ひとまずはこんなところだろう。


じゃぁ、答え合わせをしよう。

すでに発売されて半年たつゲームだから、そういう攻略記事もあるだろう、とネットを探してみる。


…全然見当たらない。この遊び方、誰もしていないのか?


スクリーンショットにもわかるように、下に所要時間がかかれている。

こちらの時間を競う RTA (Real Time Attack)の方が盛り上がっているようだ。




現時点では、エンディングに表示されるゲーム内時間で 6分53秒43、というのが最高記録のようだ。


RTA では、時間短縮のために自殺するのはかまわないので、回数は 14回。

動画も見てみたが、これはこれですごいのだけど、回数短縮の参考にはなりにくい。


ただ、知らない時間短縮テクニックを知ったので、これを使えばもう少し時間短縮できそうだ。


#砂漠のオアシスって、ずっと遠くにあるのだと思っていた…

 砂漠での「画面切り替え回数」が重要で、距離ではないのね。



さらに探してみると、やはり回数記録に挑んでいる人はいるようで、「10回」でのクリア方法解説を見つけた。


この解説で見る限り、上に書いた時間短縮テクニックを使っているようだ。


#そのオアシスが遠いので、そこにいる敵を倒して戻る、は不可能だっと思っていた。

 それだけでスタート1回分を使っていたのだけど、それを減らせれば大きい。



そして、この解説では「最低9回でクリアできるけど、難しいので10回を目指そう」という形で書かれている。


なかなかこういう記事が見当たらないと思ったら、もう発売から1年近いゲームなので、みんなこの段階は通り過ぎて RTA に行っているのだな。



まずは10回を目指すか…。

難しそうではあるが、独力でも12回を達成できたのだから、無理ではない気がする。




しかし、疲れたのでいったんハードモードをのんびり遊んだ。


ハードモード難しい。でも、何度死んでもいいや、というつもりでやっていれば、何とかなる。

クリアできた。



そして、「マリーモード」が現れた。

マリーは、ゲーム中にヒントをくれる幽霊の名前。マリーモードでは、主人公がこの幽霊になっている。


そして、幽霊なので死なない。自殺はできるけど、1分の時間制限はない。

そこで「最短スタート回数」を目指してプレーした。当然、1回のスタートで最後までクリアできた。


#時間制限がないとはいえ、敵との戦闘はある。

 普通は死んだらダメージ回復になるので、マリーの1回クリアはミスが許されない、という意味でもある。



ハードモードのアイテムをまだコンプリートしていないので、それをやってから10回に挑戦…かな?


▲目次へ ⇒この記事のURL

別年同日の日記

13年 ケミストリークエストの問題点

13年 ケミストリークエスト改正案

15年 八景島シーパラダイス 開業日(1993)


申し訳ありませんが、現在意見投稿をできない状態にしています

パソコンは買ったのだが…  2019-05-14 17:51:09  コンピュータ

▲目次へ ⇒この記事のURL

先日、パソコン壊れた、と書いた。

7年も使っていたマシンで、以前から時々調子が悪かった。



さすがに仕事のメインマシンが壊れるのは困る。完全に壊れる前に買っておこう、と早速注文。

今使っているマシンは DELL だが、7年前は DELL はダントツにコストパフォーマンスが良かった。


しかし、今調べると DELL も悪くないが、HP もいい感じ。

実は、半年前には妻がメインマシンを買い替えていて、調べた結果 HP にしている。



僕も HP に決定。

CPU 性能は低くてもいいが、メモリは多くほしい。

仕事柄、サーバーに接続して使う端末になりがちなので、CPU 性能はそれほどいらないのだ。

しかし、Chrome で同時に何ページも開いたりするので、メモリは食う。


あと、メインストレージは SSD がいいのだけど、SSD だけではさすがに足りない。

HDD と同時搭載がいい。


DELL の安いマシンは、SSD のみでメモリ増設もできない、というものが多かった。

少し高級機種になると、SSD+HDD でメモリも増設可能、というのがある。

しかし、それは高級機種なので CPU も i7 で、高い。


これに対し、HP は CPU が i5 のまま、SSD+HDD メモリ増設が選べた。

そんなわけでそちらを選ぶ。




「令和改元セール」を銘打って安かったのも後押しした。


ところが、だ。

さんざん比較してよいマシンというのは、他にも良いと感じる人が多いようで、注文殺到だそうだ。


5月7日に注文してすぐに「在庫がなくなってしまい、出荷時期のめどが立っていない。もう少し待ってほしい」というお詫びのメールが来た。


それから2日置いた5月9日、再び「納期に関するご案内」というメールが来た。

納期が決まったか、と思って開くと、「出荷のめどが立たない」というお詫びだった。


まぁ、仕方がない。

今のマシンは調子が悪いというだけでまだ使える。気長に待とう。



…とおもっていたら、スリープして再起動したときに、回復不可能なエラーが出て止まった。

再起動したらちゃんと動いたのだけど、やっぱりこのマシン不安だ。速く新しいマシン来ないかな。




で、先ほど、またメールが来ていた。

「納期に関するご案内」…やはり「出荷のめどが立たない」だった。


前のメールから5日、注文からは1週間たったので、現在の状況を報告ということだろう。

ただ、文面は少し変わっていて、「納期が決まり次第メール連絡、また、納期が決まらないまま4営業日立った場合もメール連絡」と確約している。


人気があって商品がない、というのは仕方がない。

その際の対応として、現在の状況を逐一知らせるというのは、対応としては及第点だろう。



一応、前のメールから、まだキャンセルは可能であること、急ぎの場合は即出荷モデルも提供できることも書かれている。


僕としては、また7年くらい使ってしまうだろうから、ここで妥協して別モデルにしようとも思っていない。

今のパソコンは調子悪いとはいえ十分使えているので、気長に待つことにしよう。


▲目次へ ⇒この記事のURL

関連ページ

洗濯機壊れた【日記 19/05/17】

別年同日の日記

02年 5/13

04年 ピクミン・訂正

07年 保育園の遠足

13年 ケミクエ改良ルール・策定中

15年 ジョージ・ルーカス 誕生日(1944)

15年 ルーカスの作ったもう一つの会社


申し訳ありませんが、現在意見投稿をできない状態にしています

Nexus7 (2012) 復活  2019-05-20 14:54:10  コンピュータ

▲目次へ ⇒この記事のURL

2度目の復活。不死鳥のように甦る。


Nexus7 (2012) は、2012年発売の 7inch Android 端末だ。

さすがに8年も前の端末なので、今時使い物にならない…


と思って、先日代替機として Amazon FireHD 10 を購入したのだ。

そして、代替機が手に入ったので、Nexus7 はお役御免、「捨てても構わない」機械になった。


じゃぁ、捨てる前にダメもとで遊んでみよう。

…そうしたら、使える端末に復活してしまった。





ちなみに、「2度目」と書いたが、1度目の復活は1年前だ


一度は、遅すぎて使い物にならない、と思ってほったらかしになっていた機械を、ダメもとで復活させたら案外使えていた。

しかし、1年使っていたら、やっぱり使い物にならなくて、代替機を購入した、という流れだ。



1度目までの経緯を説明しよう。


Android は現在広く使われている OS だが、最初は「スマホ用」の OS だった。

タブレット端末で使うことは想定されていなかったのだ。


当時、スマホ用には Android 2 系列が使われていた。

これに対し、Google はタブレット用の「別バージョン」として、Android 3 を作る。

3 は 2 の後継ではなく、違う機能を持つ別バージョンだった。


しかし、Android 4 では、2 と 3 の両方の機能を持つ形で統合される。

ここに、現在のように幅広く使われる Android の基礎が出来上がる。


そして、これを広く宣伝するように Google が販売した「戦略機種」が Nexus7 だった。

世界初の Android 4 搭載端末で、当時の一般的なタブレット価格から見ても、驚くような低価格設定だった。


Nexus7 は大ヒットとなり、翌年には改良機種が出る。

僕は初代を買ったので、Nexus7 (2012) と書くが、この書き方は (2013) もあるためだ。



さて、「世界初の Android 4」は、初物であるがゆえにバグが多かった。

頻繁にバージョンアップされ、最終バージョンの 4.4.4 まで進み、さらに 5 系列も提供された。


しかし、5系列も真っ先に投入されたため、またバグだらけだった。

これがひどいもので、まともに使えないほど動作が緩慢だった。


頻繁にバグ修正が行われ、5.1.1 まで行ったのだが、Nexus7 (2012)のバージョンアップはこれで終了。

使い物にならないほど緩慢なままだったので、我が家では使わなくなってしまった。



そして1年前。

5 系列が緩慢なら、4 系列に戻して使ってみよう、ということで 4.4.4 に入れなおした。


ちなみに、Android の宿命として、「バージョンアップ」を提供する仕組みはあるが、バージョンダウンは難しい。

Nexus は Google 製で、開発にも使われることを想定しているため、それなりの知識があれば好きなバージョンに戻すことができる。


4.4.4 にしたら、動作が軽快になった。

古い機械なのでパワー不足は感じるが、それなりに使える状況に戻ったので使ってきた。


ところが、1年使ったある日、急によく使っていた Radiko アプリの動作が遅くなった。

やはりパワー不足か、とあきらめて代替機を先日買ったのだ。



代替機購入の際の日記には、「Radiko のアプリ動作が緩慢になったのは、Radiko のシステム更新が原因ではないか」と書いた。

しかし、これは今はちょっと違ったかな、と思っている。後で詳細書く。




さて、今回やったこと。


僕が知らなかっただけで、1年前に「復活」させた時点では、今回の方法がすでにトレンドになっていたようだ。



使いものにならないほど遅かったNexus7改善計画

Nexus 7 (2012)をAOSP 7.1.2にアップグレード


今回は、上に書かれた2つのページを参考にして、ほぼ同じことをした。



1ページ目は、Nexus7 が Android 4.0 だったころのバグの影響が後まで残り、速度低下の原因になっている…

という指摘。ただ、あとで考えると事実誤認が含まれるように思う。これは後で説明する。


事実誤認があっても、1ページ目は2ページ目の作業を行うための「事前準備」のやり方を、懇切丁寧に教えてくれる。

目は通すべき。最終結論である「Trimmer アプリの実行」も、おまじないとしてやっておいて損はないと思う。

(多分、まったく無関係なのだけど、害はない。やって何か改善したら儲けもの)



2ページ目は、非公式ではあるが、Android 7.1.2 を入れてしまおう、というもの。

非公式とはいっても、もともと Android はオープンソース…プログラムが公開され、誰でも改造できるものだ。


そこで、正式な 7.1.2 を元にして、有志が Nexus7 (2012) に対応したバージョンを公開しているので、それを入れる。


7 は、5 よりも「最適化」が進んでいる。つまり、プログラムの無駄が省かれている。

そのため、5よりも軽快に動く。



これが非公式版で、Google が著作権を持つアプリは入っていない、ということも大きいと思う。


一般に、Android 端末を購入すると、Google 製のアプリがたくさん入っている。

場合によっては、それと同等の機能を持つ、端末メーカー製のアプリもたくさん入っている。


そして、それらは消すことができない。

場合によっては動作を止めることすらできず、CPU の速度とメモリを無駄食いする。



しかし、非公式な Android には、Google が著作権を持つアプリを同梱することが禁じられている。

…いや、Google アプリが入れられないわけではない。禁じられているのは「同梱」だけで、再配布は許可されているから。


逆に言えば、非公式 Android なら、公式なものと違って、必要最低限のアプリだけ入れるようにできる。

すると、不要な機能が動かないので動作が軽快になる。


もっとも、何が不要かは人によるだろう。

僕が軽快だと感じていても、他の人には「機能不足で使えない」と思う可能性もある。




2ページ目として紹介したページ、そのページが書かれた時点での「最新版」の 7.1.2 を使用している。

しかし、現在ではもっと新しいものがある。


紹介ページでは「2018/12/05 ~の掲示板」となっている箇所のリンク、実は掲示板の名前は、時々更新される。

現在は、日付部分が 2019/05/05 となっている。


そして、その掲示板の一番上に、最新バージョンのバイナリが置かれているので、それを取得しよう。


バージョンが違っても、どれも 7.1.2 だ。これは、「Google がつけた Android の」バージョン番号。

日付の違いは、それを Nexus 7 で動くように移植作業をした際のバージョン違いだ。


どうも、バグ取りも行われているが、セキュリティアップデートに追随するのが目的のようだ。




Nexus7 (2012) には、WiFi 版と 3G 対応版の2機種があり、名前は同じだがハードウェアが違う。

WiFi 版は Grouper 、3G 版は Tilapia というコード名がついている。どちらも魚の名前だ。


僕は Grouper の OTA-Package バイナリを選ぶ。WiFi 機種だからだ。

そして、Open GApps のバイナリも必要とする。


GApps とは Google Apps 、つまりは Gmail や Chrome などの Google 製アプリこのことだ。

Nexus7 は ARM なので、ARM - 7.1.2 - pico を選ぶ。


pico の部分は好みで変えてもいい。pico は最小セットだ。不要なものが一切入らないので動作が軽い。

その後、必要なものがあれば Google Play Store で入手すればいい。



これで、特に問題もなく、7.1.2 にすることができた。快適に動作する。

…いや、さすがに8年前のマシンなので、反応がちょっと遅い感じはあるよ?

インタラクティブに使うのは、ちょっと辛いかも。


でも、Youtube 見たり、Radiko 聞いたりといった「ストリーム再生」には問題がない。

Chrome 検索して、静的な(ゲームとかではない)ページを閲覧するのにも問題はない。




ところで、Radiko は最新版だと動かない。

旧バージョンがあるので、5.0.6 を入れると動く。

…なんか怪しげなサイトだけど、合法だと書いてあるのだから、大丈夫なのだろう。



Radiko はバージョン 6 以降でないと、タイムフリー(1週間以内ならいつでも聞ける)に対応していない。

と同時に、この機能が強力なので、放送データを録音したりできないように、動作する OS 環境がおかしなものでないかなど、厳しいチェックが入るようになったようだ。


Nexus7 (2012) で 7.1.2 なんて、「おかしい」以外の何物でもない。

最新の Radiko が動かないのは仕方がないところだろう。


#でも、先日買った Amazon Fire HD には Radiko 最新版入れられたな…

 Amazon Fire で Google Play Store アプリを入れるとか、おかしいのだけど。




さて、途中で書き逃していることを説明する。

まず、先に書いた「Trimmer には意味がなさそう」について。


SSD には TRIM という仕組みがある。

なぜ必要かは長くなるので自分で勉強してもらおう


ただ、この仕組みは最初からあったわけではないと知っておいてほしい。

当初、SSD は HDD の互換品として作られ、後に性能を上げるために TRIM という独自の仕組みが取り入れられた。



ところで、Linux という OS がある。

HDD で運用する前提で作成された OS で、いまは SSD でも使えるようになっている。


ここで、TRIM は OS そのものの仕組みとしては提供されていない。

OS 上で動作する別アプリケーションとして TRIM 動作を行うだけのものがあり、それを定期的に動かす仕組みだ。


このように機能を分離することで、OS 本体の方に HDD と SSD の違いなどを入れる必要がなくなり、プログラムが複雑になるのを避けられる。



そして、Android の中身は Linux だ。

Android は HDD を搭載しない… SSD 運用が普通なので、定期的に TRIM する必要がある。


しかし、Android 4.0 は、この「定期的な TRIM 」が動かないというバグがあったそうだ。


OS 本体が対応しないなら、アプリとして対応してやればよい。

Trimmer はそのためのアプリで、OS 内部にちゃんと持っている TRIM アプリ (fstrim という)を起動してくれる。


でも、4.0 でなければ fstrim はちゃんと起動される、らしい。

先のページがさらに参照しているページでは、「4.0 の時におかしくなったセクタが戻らない」と説明しているのだけど、fstrim の仕組みでは、そんなことにもならない。



だから、4.0 でなければ Trimmer はいらないと思う。





じゃぁ、なんで 4.4.4 を使っていても、1年の間にだんだん遅くなってきたのか、について。

Radiko のせいだと思っていたが、どうも冤罪だという件だな。


単純な話で、1年使う間にキャッシュがたまってしまったのではないか、と思っている。


前回も今回も、OS を入れなおしてすぐは、「快適動作」と感じている。

前回は、それから1年かけてだんだん遅くなっていった。


これは、入れ直しによって自然にキャッシュはクリアされてしまい、使うことで溜まっていったからではないか、という推論だ。



またしばらく使ってみて、また重くなることがあれば、まずはキャッシュクリアを試してみよう。

そうなった時には、またお知らせしたいと思う。



▲目次へ ⇒この記事のURL

別年同日の日記

02年 5/20

05年 美味しいケーキ屋さん・その後

07年 ぞうが かわに おっこちた

13年 桑の実


申し訳ありませんが、現在意見投稿をできない状態にしています

Alexa Wunderlist 連携  2019-05-29 18:15:08  コンピュータ

▲目次へ ⇒この記事のURL

先日買った Fire HD 10 、Alexa が使えるのが思った以上に便利だった。

声で操作するって、最初は恥ずかしくて抵抗があったけど、料理中などには便利なものだな。


Alexa には「お買い物リスト」という機能がある。Amazon の買い物リストとは別物。

料理中に、ソーセージ使い切っちゃったな、と思ったら「アレクサ、買い物リストにソーセージ入れといて」って頼むと、すぐに入れてくれる。


でも、この買い物リストを家族で共有できない。

Alexa のお買い物リストは、Amazon のアカウントに紐づいていて、本人しか見られないのだ。




Wunderlist は、スマホで作ったリストを家族などで共有できるサービス。

類似サービスはほかにもあるのだけど、我が家ではこれを使っている。


類似サービスには、Alexa に対応していて、そのまま声でリスト追加できるものもある。

でも、Wunderlist は対応していない。


しかし、Wunderlist はメールに対応していて、メールを送ることでリストに追加できる。



さて、IFTTT というサービスがある。

技術的なことはさておき、「いろんな WEB サービスをつなぎ合わせるサービス」だ。


これを使って、Alexa の買い物リストに追加があったら、Gmail を使って Wunderlist にメールを出し、Wunderlist の買い物リストに登録する、という方法があることを知った。


Alexaに買いたいものを伝えて共有の買い物リストに追加


この手法は結構古いらしいのだけど、上のページが丁寧に説明しており、そのまま設定すれば同じことができる。


…とおもったのだけど、やってみたがうまく動かない。


Gmail がエラーで送信できないよ、というエラーメッセージ。

このメッセージで検索すると、設定をこう変えればよい…などの情報が見つかるのだけど、どれを試してもうまくいかない。




IFTTT、3月31日からGmailのトリガーと下書き作成が利用不可に


それで見つけたのが、上のページ。


今はサービス終了した Google+ は、顧客情報が流出する可能性があるバグがあった、というのがサービス終了の決定打だった。

その後、Google はセキュリティを強化する取り組みを行う中で、Gmail を外部から操作できるようにしていたのを見直す、そのため IFTTT でも使えなくなる、という内容。



でも、ここでは「トリガー」が使えなくなるとしているだけ。

トリガーというのは、「メールが届いた」とか、状態変化を伝える機能のことで、「メールを送る」などの実際の動作を行う機能とは違う。


今回は、Gmail を使ってメールを送りたいだけなので、これとは関係ないはず。


さらに調べていたら、ちゃんと IFTTT のサイト内でこんなメッセージを発見。



Gmail actions may fail for some users.

Identified - The issue has been identified and a fix is being worked on. It will require a large rework in how Gmail is implemented, we appreciate your patience as we get Gmail up and running for everyone.

May 15, 16:51 PDT


意訳:

一部ユーザーで、Gmail でエラー

認識 - 問題は認識され、修正中です。Gmail の実装に大きな変更が必要なので、誰もが Gmail を使えるようになるまで、しばらくお待ちください。



つまり、僕のせいではなくて IFTTT 側の問題だったわけだな。

どんなに設定を見直しても無駄なわけだ。


「しばらくお待ちください」となっているが、もう2週間もこの状態のままのようだ。

いつ復帰するのかわからない。



上記調査中に、他にも気になることを見つけた。

IFTTT と Gmail と「日本語」の組み合わせを使うと、頻繁に文字化けするようなのだ。


IFTTT は基本的に英語サービスであり、日本語は「使える」が「保証されない」。

ここに、先に書いた Gmail 側の大変更なども加わり、日本語が化けるようになっては修正される、というのを時々繰り返している。


先に書いた、現在動かない件も含め、今後もこういうことがたびたびあるのかもしれない。




というわけで、不安定な Gmail に頼るのはやめよう。

幸い、Gmail 以外にも、普通の Email を使うこともできる。


ただ、Gmail では「誰にでも」送れるのに対し、Email は「自分にだけ」送れる。

Email の仕組み上、誰にでも送れてしまうと SPAM の発生源となるからだ。


自分にだけ送る、というのも、一度 Email でシステムがランダムな数値を送り、その数値を答えて認証を通さないといけない。

確実に自分向けの Email だと証明できた時だけ、自分宛の Email を自由に送れるようになる、ということだな。


そうなると、wunderlist 宛にメールすることはできないわけだが、幸い僕は自分のメールサーバを持っている。

届いたメールを、wunderlist 宛に転送しよう。



現在僕はサーバーで qmail を使っている。

qmail には、拡張メールアドレスと呼ばれる機能がある。


たとえば、ユーザー nobody のメールアドレスが nobody@example.com だったとしよう。

このとき、qmail では、nobody の後ろにハイフンと文字列を付けた nobody-ifttt@example.com もユーザー nobody に届くのだ。


しかも、この「届く」というのは、単にユーザーのメールボックスに届くのとは意味が違う。

同じメールボックスに入れる指示もできるけど、別のメールボックスに入れたり、片方だけプログラム処理したりもできる。

サーバーの時点で、ちゃんとメールを仕訳けてくれている。



自分のサーバーに qmail を入れている人には説明するまでもないのだけど、自分のホームディレクトリに


.qmail


というファイルを置くと、その内容によって自分宛のメールをどのように扱うか指定できる。


.qmail-ifttt


というファイルを置けば、自分のアカウントの後ろに -ifttt を付けたアドレス宛てのメールを処理できる。

ここに、次のように書く。


|sed 's/^From:.*$/From: nobody@example.com/' | /var/qmail/bin/qmail-inject me@wunderlist.com


メールボックスに入れるのではなく、このプログラムにメールを渡せ、という指示だ。

ここで、簡単なフィルタプログラムを書いている。


まず、From 行を書き換える。そしてそれを me@wunderlist.com に送る。



このままでは、実はヘッダに書かれた To: が自分のアドレスのままだ。

でも、wunderlist.com の方では、To: は気にしないようだ。


#メールは、「ヘッダ」と「封筒」に宛先を書ける。配信は封筒のアドレス宛てに行われるので、

 ヘッダのアドレスと配信アドレスが違うことはあり得る。


wunderlist.com の方には、僕のメールアドレスが確かに自分のものであることを事前に認証させてある。

このアドレスはヘッダの From: に書かれたものを認識するようなので、こちらは書き換える必要がある。



これで、IFTTT からのメールは、無事 wunderlist に転送され、リスト項目が追加された。




海外では、個人が作った alexa スキルで、wunder shopping というものがあるようだ。

IFTTT で Gmail が使えないのであれば、自分で Oauth 認証を通して連携させられないか…と方法を探す中で発見した。


これが日本語対応してくれれば、ややこしいことなしで wunderlist と連携できる。

でも、個人の制作物だから、対応は望めないだろう。


しかし、wunderlist との連携スキルを作ることは可能だ、と示されているわけでもある。

いっそのこと自分で作ってみるか…とまで考えた。


その時に、ふと「自分にメール送れるなら、転送すればいいんじゃん」と気づいて、上のような設定になった。

alexa スキル作成は、面倒くさいのでやらない。


でも、誰か作ったら使いたい(β版で人柱やってもいい)ので、教えてください。


▲目次へ ⇒この記事のURL

別年同日の日記

02年 PHS解約

04年 ピクミン2攻略終了…?

13年 水疱瘡

15年 8bit 時代のグラフィック

17年 チャナダル


申し訳ありませんが、現在意見投稿をできない状態にしています

新マシンセットアップ中  2019-06-09 23:38:37  コンピュータ

▲目次へ ⇒この記事のURL

新マシン…HP Pavilion 15-cs0000 が届き、セットアップ中。


なかなか人気マシンのようだし、まだ「使い勝手」が書けるほど使い込んでもいないのだけど、セットアップ時点で気づいた点を書いておこう。


まず、僕にとっては最悪ともいえる欠点から。

このマシン、タッチパッドに問題がある。


ELAN Clickpad と呼ばれる種別のものらしい。

Windows 10マシンらしく、複数の指を使ったジェスチャにも対応した、それ自体の使い勝手は悪くないものだ。


以前は、タッチパッドの端をなぞるとスクロール、という操作が流行った。

でも、ジェスチャなら2本指で動かせばスクロール。ほかにも指の数や動かす方向で、いろいろな操作が可能。


このジェスチャは Windows 10 標準のものだ。



ただし、ELAN Ckickpad では、細かな設定が一切できない。

不意にズームジェスチャが入ってしまうからいやだとか、タップするとクリック扱いになるのが嫌だとか、普通のタッチパッドではそうした機能を細かく ON / OFF してカスタマイズできるのだが、そういうカスタマイズ性が一切ない。


Windows の設定画面、デバイスから「タッチパッド」を選んでも、設定項目が出てこない。

どうやらここの設定項目はデバイスドライバの責任のようで、使用マシンによって項目が違うらしいのだけど、その設定項目が「感度」以外に何もない。


まぁ、今はセットアップ中なのでタッチパッドを使っているのだけど、常用し始めたら今メインマシンで使っているマウスを奪って新マシンで使う予定。手になじんでいるので。


それまでの辛抱だ、ということで、実は大きな問題ではない。



#ここから、翌日追記


なんてことだ!


ネットでいろんなところ見ていても、「ELAN は設定できない」みたいな書かれ方がしていたのだけど、プリインストールアプリの中に「ELAN TouchPad Setting」というものがあった。


Windows 標準の設定画面ではなく、このアプリを使うことで細かなセッティングができた。


2本指ジェスチャによるスクロールだけではなく、タッチパッドの端をなぞることによるスクロールにも対応している。

これなら、過去の別のマシンから乗り換えた人でも違和感なく操作できる。


しかし、このソフトでも設定できる「感度」だけは、Windows の設定画面でも設定できるようになっている。

ということは、ほかの設定も同じように「設定」画面で可能にして置き、より細かな設定はソフトで…などもできたはずだ。



非常に分かりにくいが、まぁ気づけば問題ないレベルなので、良しとしておこう。


#追記ここまで




画面がノングレア処理されていない、というのは思った以上に見づらいものだった。


ノートパソコンなのに、画面がスマホみたいにツルツルなのね。

スマホなら小さいから気にならないのだけど、画面が大きいので自分の顔が映り込んでいるのがよく見える。


これは、あらかじめ気にしていて、公式オプション品のノングレアシートを一緒に買ってあった。

公式だからと言って高いことはなく、同等品をアマゾンなんかで探しても似たような値段。

ならば、画面サイズに適切に合わせて切られている公式品を買った方がよかろう。


そして…そう、このシートは非常によく、画面サイズピッタリに切られている。

画面の端に合わせて綺麗に張ったつもりでも、最後が画面の枠にあたって、シートが浮いてしまうほどにピッタリサイズだ。


多分、0.5mm 程度の誤差しか許されないんじゃないだろうか。

幸いなことに、静電気と空気圧で吸着するようなタイプで、何度でも貼りなおせる。

そこは心配しないでいい。


そして、3回も貼りなおしたらさすがにホコリが入り、シートがピッタリ貼りつかなくなる。

何度でもはがせるので、ホコリの近くをはがし、セロテープでホコリを取ってやれば大丈夫。


苦労したが、最終的には綺麗に貼れた。



このシート、実際には必須だと思うだけど、価格競争のために少しでも安くするためと、生産現場で貼っていると案外手間がかかるのでシートなしで売っているのではないか、と思ってしまうほど。


#まぁ、最近は画面タッチ可能な機種もあるし、その場合は画面が傷つきやすいので、保護シートを自己責任で貼ってもらう方がよいのだろうとは思う。




キーボード。

感触は悪くない。配置にまだ慣れていないから微妙に打ち間違える、というのは慣れの問題だ。


しかし、キーボード刻印の文字が素晴らしく読みづらい。


キーボードはカッコいいメタリックな仕上げで、バックライト付きだ。

バックライトを点灯すると文字部分が光るやつね。


カッコいいけど、ノートパソコンとして使うには電池を少しでも節約したい、と思ってしまう。

もちろんバックライトは消せるのだけど、消すと先に書いたように読みづらい。


光が透過する部分は、灰色で半透明。半透明ということは、見る状況によって微妙に色が変わるということだ。

ここに、メタリックなキーボード。メタリックということは、見る状況によって微妙に色が変わるということだ。


この、微妙に色が変わる下地に微妙に色が変わる文字、というのが、周囲の明るさによっては致命的に視認性が悪い。


まぁ、キーボード打っているときは手が配列覚えているから、視認性悪くてもそれほど問題ないのだけど。




キーボードついでにもう一つ。


せっかくテンキーがついているのに、num lock のインジケーターランプがない。

なので、数字を入れようとしたカーソルが動いてしまう、なんてこともしばしば。


まぁ、こちらもインジケーターがあったとしても、案外見ていないものなのだけど。


普通は、起動時に num lock を ON / OFF どちらの状態にするかは、BIOS (今時は UEFI か)で設定する。

しかし、Pavilion の BIOS には設定項目がなかった。


(ちなみに、BIOS 起動は昔ながらの F1 や F2 ではなかった。

 shift 押しながら Windows を起動して、Windows の起動オプションからトラブルシューティング→詳細オプションを選ぶと、UEFI の設定がある。)


しばらく使っていて分かったが、どうやら「前回使っていた設定」で起動するようだ。

ということは、これは Windows 10 が制御しているのかな?



BIOS を見ていたら、Function キーをどう扱うかの設定もできた。


出荷時設定では、F1~F12 を押そうと思ったら、Fn キーと一緒に押さないといけない。

通常は、音量変更や画面輝度変更キーとして働く。これはまぁ、ノートパソコンなのでそんなものかな、と思っていた。


でも、設定を変更すると、通常は F1~F12 として働き、Fn キー併用で音量変更、のようにできる。

僕としてはこちらの動作が好みなので、設定を変えた。



キーには、音量変更などの絵が大きく書いてあり、F1などの表記は小さめに書いてある。

これが、先に書いたキーの文字が視認しにくい問題と併さり、どれがどのキーかわからない。


基本的には、数字キーの 1 の上にあるのhが F1 、9 の上にあるのが F9 、という認識でよい。

慣れてしまえば何の問題もなさそうだ。




というわけで、細かな文句はあるのだけど、どれも些細な事。

全体的にはよく出ていると思います。色々調べてそう思ったから買ったのだけど。


一応、ここに書いた「些細な事」は、僕が気になって、でもまぁいいか、と思った程度のことなのだけど、人によっては致命的かもしれないので、これから買う人の参考になれば、と思う。



そして、この文章は、新マシンで書いてみた。

セットアップするだけでなく、ちゃんと使ってみた最初の例だ。


▲目次へ ⇒この記事のURL

別年同日の日記

02年 最終戦略

05年 spring has come

05年 3ヶ月点検

13年 WEB上でのドット絵の拡大

16年 8086 発表日(1978)

17年 計算機の同人誌


申し訳ありませんが、現在意見投稿をできない状態にしています

Google drive バックアップと同期  2019-06-12 14:49:47  コンピュータ

▲目次へ ⇒この記事のURL

新マシンに移行した。


旧マシンはしばらく使わないつもりで置いておく。

引き揚げ忘れたデータとかが眠っているかもしれないから。

でも、たぶん引き揚げ忘れたデータが本当にあったとしたら、それは忘れる程度のデータなので消えても構わないと思う。


実は、半年ほど前に旧マシンに Windows を再インストールしており、その際に「移行しやすいように」データ整理をしていたので、移行はスムーズにいった。




でも、若干の予想外もあった。


我が家では NAS に家族の写真・ビデオをたっぷりとため込んであって、この NAS は重要なので外付けハードディスクに定期バックアップもとっている。


しかし、それとは別に Google Photos にも写真を送ってバックアップしている。

「画質が落とされるのでバックアップにはならない」という人もいるのだけど、上に書いたように十分なバックアップは取った上の話だ。


Google のものは、万が一火事などで機材一切が滅失した際に、思い出写真として見られるのに十分なものがあればよい、という程度と考えている。


で、問題はこの Google に対するバックアップだ。

Google Drive を扱うツールは NAS のプラグインや Linux にもあるのだけど、Google Photos で「無制限」に写真を送るためのツールは Win / Mac 版しか用意されていない。




ここらへんで説明が必要な人も多いだろう。

Google Drive と Google Photos は、シームレスにつながるサービスだ。


Google Drive はネットワーク越しにデータを預かってくれるサービスで、Google Photos は写真を預かってくれるサービス。

でも、Photos の保存領域は、実は Drive のものだ。


ただし、Photos では「十分に小さな写真」は、Drive の容量として計上しないことになっている。

だから、今く使えば容量無制限で写真をバックアップできる。



ここで「十分に小さな」というのは、過去に何度か改定されてきている。

最初は、2048x2048画素以内、とされていた。実際にはバグがあって、ぎりぎりサイズはダメだったのだけど。


Google は、当時は Google Picasa というソフトを Windows 用に配布していて、このソフトからアップロードすると、自動的に 1600px まで縮小してアップロードしてくれた。

(当時は、Google Photos ではなく Picasa Web という名前だった


のちに、Picasa は開発終了し、写真のバックアップだけを行う Google Photo Uploader が作られた。

そしてさらに、Google Drive バックアップと同期、というソフトに変わった。



同時に、保存できるサイズも大きくなってきている。

現在は「1600万画素、かつ 75MByte」までとなっている。4000x4000 なら、ちょうど 16000万画素なのでそのままアップロードできる。(75MByte の制限はあるのだけど)


ただ、この制限に適合するようにアップロードしてくれるソフト、「バックアップと同期」が、Windows / Mac 版しか作られていないのだ。




今までは、Windows 版のソフトを動かし、NAS をバックアップ元に指定して Google にアップロードさせていた。

今回もそれをやったら…これ、ノートにさせるような作業じゃないね?


今まではデスクトップマシンでイーサネット接続だったので、NAS から写真を取得して、リサイズして再圧縮して Google に送信、というタスクを動かしていても気にならなかった。


でも、WiFi 接続だとイーサより遅いし、WiFi の電波帯域は家族で共有しているので迷惑になりそう。

いや、イーサだって共有なのだけど、WiFi を使う機材とイーサを使う機材で棲み分けていた、という感じ。


(その WiFi はイーサにつながっているのだけど、一番通信量の大きい、僕のマシンと NAS の間、というのと、WiFi ステーションとネットワークルータの間、というのは、スイッチングハブによって切り分けられている)




ひとまず、ノートマシンにイーサケーブルつないで凌いでいるのだけど、どうにかしたい。

Linux サーバーはあるので、Linux から Google Photos にアップロードできればいいのだけど…と調べたのだけど、相変わらずそのためのソフトはない。


じゃぁ、Windows を仮想化してサーバーに入れるか。

幸い、メインマシンの Windows はライセンスを購入したもので、PC 付属の OEM ではない。


#PC 付属の OEM 版は、別のマシンで使用することは禁じられている。

 今まで使っていたメインマシンは、もともと Windows 7 マシンだったのだけど、8 にバージョンアップする際にライセンスを購入し、このライセンスは Windows 10 に無償バージョンアップされた。


Windows には「Hyper-v」という仮想化技術があるのだけど、これは実は Xen が開発したもの。

Xen は Linux で生まれた仮想化技術で、現在は KVM に引き継がれている、と考えて間違いない。


#Xen 自体はまだあるのだけど、今から使うメリットはあまりない。


うちのサーバーは KVM が入れてあるので、この上に Windows を入れることは可能だ。


実は、Google Drive 同期とバックアップは、外部の NAS のデータを送信する際は、Windows がスリープして NAS との通信が切断するたびに一時停止する、という問題がある。

まぁ、問題というか仕様なのだけど、仮想化サーバーに入れておけばこの問題も解決する。




というわけで、Windows 仮想化が本命だなーと思いつつ、じつはまだサーバーの整備が終わっていないし、旧マシンもしばらく置いておきたいのでライセンスの関係もあってすぐには仮想化できない。


サーバー整備は、去年から少しづつやっているもの。

Xen サーバーの仮想マシンを KVM に移行したいのだけど、この意向を簡単に行うソフトが曲者で、一筋縄ではいかないとわかってきたところ。


「単純だけど本格運用には不満がある」仮想化マシンなら簡単に移行させてくれるのだけど、本格運用を目指した設定のマシンだと移行できないという…

まぁ、本格運用を目指した、というのは標準的でない設定をたくさん使っているという意味であり、仕方がないことでもあるのだけど。



▲目次へ ⇒この記事のURL

別年同日の日記

02年 OSアップデート!!

05年 夏至祭

15年 生卵と生豚と

17年 連乗機能

18年 ゲームの作り方


申し訳ありませんが、現在意見投稿をできない状態にしています

google photos その後  2019-06-14 12:27:41  コンピュータ

▲目次へ ⇒この記事のURL

2日前に「Google Photos にバックアップする方法、ノートパソコンだとつらいなー」ってことを書いた。


で、その後調査していて、普通に Linux で動く Google Photos アップローダーを発見した。

なんでも、2018年5月…およそ一年前に Google Photos の API が公開されて、サードパーティ製のソフトも作れるようになったようだ。


で、使ってみたのだけど、満足するものではなかった。

画像を圧縮しないで、元画像のまま送り込むソフトだったのね。


他にも、EXIF がついてない画像…つけようがない動画なんかも、撮影日がアップロード日付になってしまうそうだ。


圧縮はソフトの問題かもしれない。


一応、ある程度送り込んだところで、Google Photos 側で「圧縮」処理してもらい、Google Drive 容量を開ける、ということもできる。



でも、日付は API に指定方法がないためどうしようもない、とのこと。


類似ソフトはほかにも発表されているようなのだけど、API がないのであれば他のソフトでも同じ問題は出るのだろう。



そんなわけで、やっぱり本命は Windows の仮想化か。

1つのソフトのために仮想マシンを用意して Windows インストールするとか、なんか間違っている気がするので、ほかの解決方法があるとありがたいのだけど。





余談。

いつものことだけど、余談のほうが長い。



冒頭にあげたアップロードツール、コマンドラインで動くのだけど、普通は GUIというか、X Window 必須です。


というのも、Google の認証が必要で、その部分は WEB ブラウザでないとできないから。

WEB ブラウザは、普通に考えると GUI がないと動かない。


流れとしては、


1) アップロードツール起動

2) 初回のみ、Google の認証が必要。URL が表示され、ブラウザでアクセスするように指示される。

3) ブラウザでアクセスし、Google の認証を通すと、その結果をツールが受け取って動作できる。


という仕組み。

一度認証を通せば、その認証情報はツールが保持するので以降は認証する必要はない。



僕は家庭内サーバーを完全 CUI で使っていて、Windows 上の Putty …端末ソフトで扱っている。


そこで、まず w3m をインストールしてみた。

文字だけで動作する WEB ブラウザだ。とにかく WEB ブラウザが動けば大丈夫そうだから。



ここで、実は操作を誤った。

文字だけになったら普段見ている画面と違うので、勘違いして別のリンクを押したのだ。


そうしたら reCAPTCHA 入力画面になった。

画像の中にゆがんだ文字が書かれていて、入力を求められるやつだな。


…テキストブラウザでは、画像が見えない。


どうしよう、と考えて、cacaview というソフトの存在を知る。

テキスト端末でもアスキーアートとして画像を表示してくれるソフトで、reCAPCHA の文字が読める程度には再現性もよい。


w3m はテキストブラウザとは言え、画像部分は外部ソフトに渡してみられるようになっている。

X Windows 環境で画像だけ別ソフトで開くことを想定しているのだけど、cacaview で開いたってもちろん構わない。


cacaview は CentOS なら caca-utils というパッケージを入れれば入る。



…で、さんざん苦労して認証を通して(やっぱ reCAPCHA 文字は読みにくく、何度も間違えた)、そのあとで「あ、これ違う画面だ」と気づいた。

本当に進みたかったルートではない。


本来進みたいルートに進んだら、あっさりと「Javascript が動かないので別のブラウザでお試しください」という画面になった。


w3m は Javascript が動かない。ダメだ。




しばらく考えて、サーバーに入っている nginx を使うことにした。


GooglePhotos のアップロードツールでは、localhost に対してアクセスを求められる。

そこで、nginx で適当な名前でサーバー公開して(もちろん家庭内だけ)、バックプロクシとして動作させて localhost にアクセスすればよい。


これで認証は通った。

最後に、GooglePhotos のアップロードツールに情報を渡すため、もう一度 localhost にリダイレクトされるのだけど、この部分で「localhost」ってことで、Windows にアクセスが行ってしまう。


まぁ、URL はわかったので、w3m でアクセスする。

これで認証が通った。




先に書いた通り、GooglePhotos アップロードツールは僕の求めていたものではなかったのだけど、この手順を踏めば、一切 X Window 環境なしに使える、本当のコマンドラインツールになる。


必要な人はお試しあれ。


▲目次へ ⇒この記事のURL

別年同日の日記

02年 眠り姫

06年 CSS

13年 びわ


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -