はてなキーワード: Arcとは
人間は100%解けるけど、AIは1%未満しか解けない問題ARC-AGI-3面白いね。スマホでも出来る。
「ルール説明なくゲーム始まるから試行錯誤してギミック把握しろ」って感じで、動画広告みたいな簡単なゲームがいっぱいある。
俺はm0r0ってゲームのレベル3で詰みかけたけど、気付いたら簡単だった。これは操作説明に書いといてくれよってイラッとしたね。
replayを検索したら、最新AIのGemini 3.1 pro preview、GPT5.4-2026-03-05、grok-4.20-beta-0309-reasoningはレベル1すらクリアできず、Claude 4.6 opsもレベル2で詰んでた。
m0r0はここから遊べる。下の方に行くとreplayがある。
ヤマザキ「春のパン祭り」の白いお皿は、フランスのガラスメーカーであるアルク・フランス社(Arc France)が製造しています。
製造コストに関する公式な数値は公開されていませんが、これまでの情報から以下の通り推定・推測されています。
製造コスト(推定): 1枚あたり数十円〜100円程度と推測されています。
大量生産(毎年約1,400万枚)、強化ガラスという薄利多売の素材、運送費などを考慮すると、100円程度で製造されている可能性が高いとみられています。
素材: アルク社の「リュミナルク(Luminarc)」ブランドなどで知られる、非常に傷がつきにくく丈夫な「強化ガラス」です。
特徴: 1981年の初回から、フランスのアルク社が製造を一貫して担当し、その品質の高さから「絶対に割れない皿」として人気を博しています。
累計交換枚数は5億5000万枚を超えており(2022年時点)、その高い品質とブランド力が、長年続くキャンペーンの成功要因となっています。
anond:20251226191933 に書くことも考えたが、長くなりすぎるので分割することにした。
なお、三大検索エンジン (Google・Yahoo・Bing・あとひとつは?) はDuckDuckGoとTwookuL以外の全ブラウザーで設定できる。楽天ウェブ検索でも設定できるが、楽天ウェブ検索の良さをつぶしてしまうことになるのでおすすめはできない。
以下は日本で使用した場合に表示される候補 (2025年12月現在 / iOS 26.2) になる。
Chrome → Google (デフォルト) / Yahoo! JAPAN / Microsoft Bing / DuckDuckGo / Ecosia
Ecosiaは検索数に応じて木が植えられるので、地球環境に貢献できる。
Safari → Google (デフォルト) / Yahoo / Bing / DuckDuckGo / Ecosia
Yahooの!がついていないのは表記をブラウザーにあわせているため。プライベートブラウズの検索エンジンを別々に設定できる。通常はGoogleで、プライベートブラウズのときだけBingかDuckDuckGoにするという選択も可能。
Edge → Bing (デフォルト) / Yahoo! JAPAN / Google / DuckDuckGo / 百度 / Cốc Cốc
百度は中国、Cốc Cốcはベトナムの検索エンジン。なお、百度は日本での検索事業からは撤退しており (そのため中国の百度で検索される) 、現在は日本語入力アプリ (Simeji) の開発がメイン。
Brave → Yahoo! JAPAN (デフォルト) / Brave Search (プライベートタブのデフォルト) / Bing / DuckDuckGo / Google / Qwant / Startpage
Safariと同様プライベート検索を別に設定できる。Googleが一覧でかなり下の順位になっているのとプライバシー重視の検索エンジンが多数登録されているのが特徴的。
なお、一覧にない検索エンジンでも手動でURLを入力しての登録が可能。
Qwantはフランス、Startpageはオランダの検索エンジン。2つともEUにあるためGDPRの対象となり、すくなくともEUの法律にのっとったプライバシー保護は保障される。
ちなみにStartpageはStartMailというサービスも提供しており、月額料金はかかるがメールエイリアス (日本でいう捨てメアド) を無制限に作成できる (書かなかったけどSafariもiCloudを有料プランにすればメールを非公開という同等機能がつかえる) 。
楽天ウェブ検索 → 楽天ウェブ検索 (デフォルト) / Google / Yahoo! JAPAN / Microsoft Bing / DuckDuckGo / 百度
楽天ウェブ検索以外に設定すると、検索でポイントをためることができなくなり、このアプリのメリットがなくなってしまう。
Opera → Google (デフォルト) / Yandex / Baidu / Yahoo / Bing / DuckDuckGo / Amazon / eBay / IMDB / Wikipedia / Qwant
Yandexはロシアの検索エンジン。Baiduは上記でもたびたびでてきた百度の英語表記 (ちなみに日本語表記はバイドゥ) 。
ショッピングサイトとしてAmazonやeBayが登録されている。ちなみにeBayは日本ではQoo10というサービスを展開している。
IMDBは映画のデータベース。映画好きで英語ができる (英語表示のみなので / 内部的には日本語タイトルも登録されているため検索ワードの入力は日本語でも可能) ならばこれに設定するとよいだろう。
検索エンジンが元ということもあるが割り切った仕様である。とはいえ検索エンジンのほうが先だったのはGoogleもそうなのだが、Chromeでは上記のとおり検索エンジンの変更ができる。
ポルン → Google (デフォルト) / Yahoo! 検索 / Yahoo! 検索 きっず / Bing / DuckDuckGo / Baidu
Yahoo! きっずが登録されているのはめずらしい。不適切なサイトを可能なかぎり検索結果に表示したくないならあえて設定するのもあり?
ちなみにこのブラウザーは通常の検索のほかにスマート検索という機能があり、検索ワードを通常通り入力すると下に「Google」「YouTube」などのボタンも表示される。改行キーのかわりにボタンをおすと選択した検索エンジンを使用する。順番をならびかえてDuckDuckGo・Yandex・Bingも上位にすればメタ検索エンジン的なつかいかたもできる。
TwookuL → DuckDuckGo (デフォルト) / Bing / Google / Wikipedia / Amazon
DuckDuckGoがデフォルトなのは今回紹介したブラウザーのなかでは (DuckDuckGo以外) 唯一である。めずらしくYahooが選択肢にない。
Firefox → Bing / DuckDuckGo / Google (デフォルト) / Perplexity / Wikipedia (ja) / Yahoo! JAPAN / Yahoo!オークション / 楽天市場
こんな順番でGoogleがデフォルト設定なのはおそらく文字コード順 (あいうえお順) だからだろう。メーカーの意図で順番を操作していないともいえる。Brave同様、どんな検索エンジンでも追加登録が可能。
Uvoice → Google (デフォルト) / Yahoo! / Bing
Arc Search → Browse for Me / Google (デフォルト) / Bing / DuckDuckGo / Ecosia / Perplexity / Kagi
Browse for Meは一番上であることからもわかるように、Arc Searchオリジナルの検索エンジンで、検索結果が生成AIによって作成される。どれに設定しても検索候補にある「Browse for Me」ボタンで使用できるが、デフォルトを変更すると改行キーでも使用できる。
Kagiは課金をして使用する検索エンジンで、無料サービスを維持するために必要な広告が表示されないのが特徴。もし広告にうんざりしているならば課金するとよさそう。
anond:20250917090343 と anond:20251109153558 のさらにつづき。
anond:20250917090343 のほうでロック画面の時計のデザインを「ガラス」「ソリッド」から選択できるというのは書いたが、iOS 26.2で「ガラス」選択時の透明度をこまかく調整できるようになった。これにより時計のデザインは「ガラス」のほうがいいけど数字は読みやすくしたいというニーズに対応できるようになった。
...だけなので、デザイン以外でのiOS 26.2での最大の変更点もあわせてかいておくと、iOS 26.2にアップデートしてはじめてSafariを起動すると、デフォルトブラウザーの選択画面が自動的に表示されるようになった。(Safariの設定を開いて手動で変更するぶんには26.2以前でも可能)
日本で使用する場合に表示される選択肢 (2025年12月現在) は、
==== (続きを読む)
である。自分の表示された順番で書いたが、上側グループ、下側グループのなかではランダムな順番で表示される。
言いかえると、楽天ウェブ検索はかならず1番目から5番目のどこかに表示されるということだ。楽天ってそんなに影響力があったのか...。
はてな市民であれば、Firefoxが非営利団体による開発であることは知っているとは思うが、ポルンやTwookuLもインディーズ (独立系) である。
ちなみにおすすめは、
以前の記事でも書いたがUIはiOS 18とおなじにもどせる。設定 → アプリ → Safariから。
トラッカーをブロックしてプライバシーを守りたい → Safari・Edge・Brave・Opera・DuckDuckGo・Firefoxのどれか
EdgeやFirefoxはブロックレベルを選択でき、オンにしたままサイトを快適に閲覧するのを優先するか、トラッカーを厳重にブロックするかを選択できる。ほかのブラウザーで快適に閲覧できないサイトがあるときは、ブロック機能をオフにするしかない。
Googleはトラッカーを使用せずに関連広告の表示や広告効果の測定ができる方法を提案している (Safariの設定にある「プライバシー保護広告の測定」がそれにあたる) 。しかし、もっぱらGoogleの広告システムにのみ使用されており (2025年12月現在) 、普及しているとはいいがたい。Chromeもデスクトップ版に広告の測定機能はあるものの、トラッカーをブロックする機能はついていないため、Google以外の広告業者に個人情報をわたしたくないという場合はChrome以外のブラウザーにしたほうがよいだろう。
広告を非表示にしてデータ使用量を節約したい → Safari (+拡張機能) ・Edge・Brave・Opera・ポルン・TwookuL・Arc Searchのどれか
Safariはコンテンツブロッカーに対応した拡張機能を使用することで、閲覧したサイトを拡張機能に送信せずに広告を非表示にできる (ブロックリストがSafariにインストールされるかたち / そのため拡張機能自体を切らなくてもブロッカーだけを一時的にオフにできる) 。
Edgeはデスクトップ版は広告を非表示にするには拡張機能が必要だが、モバイル版は最初から非表示にする設定項目がある。
Googleは広告会社でもあり、重要な収益源となっているため、Chromeに広告ブロックが搭載されることはまずないだろう (さすがに押し付けがましい広告 (閉じにくい広告とか) を表示しているサイトはデフォルトでブロックされるらしいが実際に効果がでているのかはわからない) 。
生成AIを積極的に活用したい → EdgeかArc Search
EdgeやArc Searchはデフォルト設定で使用する場合、検索結果もAIで生成される。
ポイントをためたい → Edge・楽天ウェブ検索・Uvoiceのどれか
Edgeと楽天ウェブ検索はデフォルト以外の検索エンジンを使用するように設定するとポイントがたまらなくなるので、ポイント目的なら変更しないように注意。また、プライベートブラウズモードで検索した場合、そのぶんのポイントはたまらない。みられたくない検索だけプライベートにするとかなら大丈夫だが、常時プライベート勢ならポイントはあきらめよう。
実はデフォルトのアプリはブラウザー以外も変更できる。「メール」(Gmail)「通話」(Google Meet / 現状デフォルト設定にはできない)「ナビゲーション」(Google マップかWaze)「翻訳」(Google 翻訳)「パスワードとコード」(ChromeとGoogle Authenticator)「キーボード」(Gboard) も変更することで、ほぼ完全にGoogleに依存したiPhoneのできあがり。「アプリのインストール」(Play ストア) と「非接触型アプリ」(Google ウォレット) は2025年12月現在iOSにはやってきていない。
国産にこだわりたい → 楽天ウェブ検索・ポルン・TwookuLのどれか
ただしどのブラウザーもベースは海外産のブラウザーなので、純国産は存在しない。楽天ウェブ検索はChromeがベース (設定画面が激似なのでわかりやすい) 。
新しいタブでニュースを表示したい → Chrome・Edge・楽天ウェブ検索・Brave・Operaのどれか
新しいタブで下にスクロールするとニュースが表示される。もちろん非表示にも設定できる。
新しいタブを完全に空白にしたい → Safari・Firefox・Braveのどれか
Safariは設定画面の都合上、全要素を非表示にしても「編集」ボタンだけはのこる。それも嫌ならFirefoxかBraveの2択になる。
ウェブサイトからのプッシュ通知をうけとりたい → 対応アプリなし
iOSの制約によるもの。通知を許可したいサイトは個別にホーム画面にアイコンを追加してWeb アプリとして開く必要がある。それが面倒ならば現時点ではAndroidにのりかえるしかない。まあ、広告などから危険サイトをうっかりひらいてそのまま通知を許可、アダルト広告が大量に配信というのは防げるが (母 (Android民) がやってしまったことがある 消してあげたけど) ...。
アプリ再起動でセッションを再開してほしくない → Edge・DuckDuckGo・ポルン・TwookuLのどれか
ちなみに、SafariやBraveは一切復元しないはできないものの、使用していないタブを自動的に閉じる設定があるので、1日後とかにしておけばまあ...。
Firefoxはタブは閉じないが、起動時は新しいタブから開始するという設定はできる。Uvoiceは設定はないが、タブはそのままのポイ活画面から開始なので、Firefoxの当該設定にちかい挙動である。
タブを1列で表示したい → ポルンかUvoice
スマホの画面が年々おおきくなったから2列表示のほうがたくさん表示できるというのはあるのだが、片手で操作するなら1列表示のほうが便利。ポルンは1列だとサムネイル表示なし、Uvoiceはサムネイル表示ありなので、かつてのSafariのような一覧性をもとめるならUvoiceがいちばんちかい。
iOS 18.4でやっと他社ブラウザーへの機能拡張が開放されて、Edgeがいちはやく対応している。ただし、SafariとEdgeでは拡張機能に互換性はないのでそれぞれでインストールする必要がある。
Chromeでしか閲覧できないウェブサイト → どうすることもできない
iOSの制約で、アプリ内ブラウザーはSafariが強制されるので、レンダリングそのものはSafariで閲覧した場合とおなじ結果になる。
サイバー攻撃の標的になっている → SafariかChrome
ロックダウンモードに設定することで、脆弱性を塞ぐことができるが、一部のサイトでは不具合が起こる。あくまで緊急時に一時的に使用するモードであることは理解して設定すること。
本稿で提示するプロファイルは、10万件以上のブクマを有するidを対象に公開コメントをAIが解析し、その深層心理や思想傾向をモデル化した「テキスト・ペルソナ」です。これは実在する個人のプライバシーを暴くものではなく、言語活動に基づく批評的なシミュレーション(思考実験)です。特定の個人の社会的評価を操作する意図はなく、あくまでテキスト分析の一環としてお楽しみください。
世代・時代背景 (Generational Cohort):
生活圏・経済階層 (Habitat & Economic Class):
ライフステージ・役割 (Family & Social Roles):
専門性と認知スキル (Expertise & Cognitive Style):
情報摂取源とリテラシー (Information Sources & Literacy):
政治的・経済的スタンス (Political & Economic Stance):
「敵」と「味方」の認定 (Enemy & Ally Designation):
道徳的基盤 (Moral Foundations):
対人スタンス (Interpersonal Stance):
コミュニティ帰属意識 (Community Belonging):
「世界の全てを冷笑し、ワンルームの『コックピット』から呪詛を撒き散らす、孤独な氷河期サバイバー」
この人物は、現代日本が抱える「氷河期世代の棄民化」と「ネット世論の分断」が生み出した、悲しきモンスターです。経済的な停滞と社会的な孤立が、彼から他者への共感能力を奪い、代わりにネット上の過激なイデオロギーで空虚な心を埋めさせました。彼は社会に対して「復讐」するかのように冷笑的なコメントを書き込み続けますが、その刃は巡り巡って、誰とも繋がれない自身の孤独をより一層深めていることに、気づかないふりをし続けています。
本稿で提示するプロファイルは、10万件以上のブクマを有するidを対象に公開コメントをAIが解析し、その深層心理や思想傾向をモデル化した「テキスト・ペルソナ」です。これは実在する個人のプライバシーを暴くものではなく、言語活動に基づく批評的なシミュレーション(思考実験)です。特定の個人の社会的評価を操作する意図はなく、あくまでAIによるテキスト分析の一環としてお楽しみください。
レポートによると、この法律は米国のデジタル資産、特に「決済用ステーブルコイン」に関する連邦レベルの明確なルールを定めたものです。
最も重要な規定は、ステーブルコインの発行者に対する厳格な資産裏付け要件です。
要件: 現金(Cash)または短期米国債(Short-term T-bills)による100%の準備金を保持しなければならない。
目的: ステーブルコインのリスク(取り付け騒ぎやデペグ)を排除し、米ドルと同等の安全性を持たせること。
結果: これにより、ステーブルコインは実質的に「デジタル・ドル」としての地位を確立し、銀行や機関投資家が安心して扱える資産となりました。
法律の遵守(コンプライアンス)に伴い、ブロックチェーン側にも新たな技術的仕様が求められるようになりました。機関投資家が利用するためには、以下の2点が必要です。
KYC/AMLへの対応: 顧客確認(KYC)およびマネーロンダリング対策(AML)を効率的に満たす仕組み。
選択的プライバシー機能: すべての取引が公開されるパブリックチェーンではなく、機関の取引内容(金額や相手)を保護できるプライバシー機能。
金融取引の決済において、不確実な時間を排除することが求められます。
要件: 「サブ秒(1秒未満)」での取引完了(ファイナリティ)。
背景: 従来の銀行システムや高頻度取引に匹敵するスピードが必要とされています。
この法律の施行により、既存のブロックチェーンの勢力図に変化が生じると予測されています。
取引完了に12秒かかる点と、全ての取引が透明(プライバシーがない)である点が、機関投資家のニーズ(即時決済・秘匿性)と合致しないため、機関マネーの受け皿として不利になる。
規制準拠(GENIUS法対応)を前提に設計されており、「選択的プライバシー」と「サブ秒の完了性」を持つため、機関投資家のステーブルコイン業務のシェアを奪う。
小売(リテール)分野で拡大しつつ、2026年初頭の「Firedancer(アップグレード)」により処理能力と速度を向上させ、機関向け業務の獲得も狙う。
ごもっともな疑問です。GENIUS法やイーサリアムの技術的な話(DeFiやステーブルコイン)は、一見すると「アルトコインやブロックチェーン技術」の話であって、「なぜそれがビットコイン(BTC)の価格を押し上げるのか?」というつながりが見えにくいですよね。
レポートの論理を紐解くと、これらは「お金の入り口(パイプ)」と「最終的な行き先(貯蔵庫)」の関係で説明されています。
なぜ「アルトコインや規制の話」が「BTC爆上げ」につながるのか、3つのロジックで解説します。
1. GENIUS法は「機関投資家マネーの高速道路」を作るから
GENIUS法でステーブルコインが「100%現金/国債裏付け」になり、国の認可を受けるということは、銀行や大企業が堂々とブロックチェーンにお金を入れられるようになることを意味します。
これまで: 規制が怖くて、機関投資家は巨額の資金をクリプト市場に入れにくかった。
これから(GENIUS法後): 「デジタル・ドル(ステーブルコイン)」として安全に資金をブロックチェーン上に持ち込める。
BTCへの波及: クリスプト市場に入ってきた数兆円規模の「機関投資家の資金」は、最終的にどこに向かうか?
リスクの高いアルトコインではなく、最も流動性が高く、価値の保存手段として認められているビットコインに、ポートフォリオの核として資金が流れます。つまり、ステーブルコインは「入り口」であり、その資金が向かう「本命の投資先」がBTCという構造です。
レポートでは「金(ゴールド)が下がって、BTCが上がる」と予測しています。
イーサリアムなどの役割: 送金、契約、DeFiなどの「実用・技術」担当。技術競争(速度やプライバシー)で勝ったり負けたりする。
ビットコインの役割: デジタルな「国家レベルの資産(Sovereign Asset)」。
ロジック: GENIUS法などで市場全体が信頼できるものになればなるほど、「インターネット上の基軸通貨」としてのBTCの地位が盤石になります。ドルが強い環境下で、投資家が金(ゴールド)から資金を抜く際、その避難先として選ばれるのが「規制された市場の王様」であるBTCになる、という理屈です。
3. 企業の「余剰資金」がBTCに流れる(OB3法案の影響)
これはイーサリアムとは別の話ですが、レポートにある重要な要素です。
OB3(大型減税法案): 法人税が下がり、企業の手元に現金が増える。
トレジャリー(財務戦略): 企業はその余った現金をただ持っているだけでなく、インフレヘッジなどのために運用したい。
BTCへの波及: 既にマイクロストラテジーなどがやっているように、企業の準備資産(トレジャリー)としてBTCを購入する動きが加速する。「ETFと企業の保有で供給の11.7%がロックされる」というのは、この動きを指しています。
「GENIUS法で『道路』が整備され、OB3減税で『軍資金』を得た企業が、最終的に『土地(BTC)』を買い占めに来る」 というシナリオです。イーサリアムやソラナの話は「道路工事の競争」の話であり、BTCの話は「値上がりする土地」の話として区別されています。
ビットコインの価格を語る上で欠かせない「半減期(Halving)」について、基本的な仕組みと、今回のレポートがなぜそれを「あまり重要ではない」と見ているのかを解説します。
半減期とは、ビットコインの新規供給量が文字通り半分になるイベントです。
1. 仕組み
時期: 約4年に一度(正確には21万ブロックが生成されるごと)。
内容: ビットコインのマイニング(採掘)報酬が半分になります。
2. 目的と効果デフレ資産: BTCの発行量を計画的に減らすことで、希少性を高めます。
これにより、ビットコインはインフレ耐性のあるデジタル・ゴールドとしての性質を持ちます。
供給ショック: 市場に新しく出回るBTCの量が突然減るため、需要が変わらなければ、理論上は価格に上昇圧力がかかります。
【ポイント】 これまでの歴史上、半減期の約1年後には価格が大幅に上昇する傾向が見られてきました。これが従来の「4年サイクル」の根拠です。
今回のサイクル(2025年〜2026年)では、半減期のポジティブな影響をマクロ経済の力が上回ると主張しています。
レポートは、価格の牽引役が「供給側(半減期)」から「需要側(機関投資家)」に移ったと分析しています。
レポートが、半減期による価格の緩やかな上昇を超える力を持つと見ているのが、以下の3つの強烈な需要側の要因です。
具体的な数値: ETFや企業財務保有(DAT)が、既にBTCの**総供給量の約11.7%を保有している。
意味合い: これは、市場で売買される流動的なBTCが減り、価格変動に強い「硬い需要の層」が形成されたことを意味します。この構造的な買い圧力が、半減期で供給量が減る効果よりも強力だと見られています。
GENIUS法: ステーブルコインの規制整備により、数兆円規模の機関投資家マネーの参入障壁が取り払われる(前の回答で説明した「高速道路」の整備)。
OB3法案: 企業減税により、企業の余剰資金(法人マネー)がBTCに流れるインセンティブが強化される。
結論: 規制環境の改善と企業の資金力投入が、単なる半減期では達成できないほどの、持続的で巨大な需要を生み出すと予測されています。
レポートは、金利とドル高の環境が続く中で、利回りのない金(ゴールド)は調整局面に入ると予測しています。
対照的に、規制整備と機関参入を経たBTCは「主権格の価値の保管手段」としてゴールドのポジションを奪い取るとされています。
【まとめ】
このレポートのシナリオでは、半減期は依然として重要ですが、その効果は「マクロ経済の潮目」と「機関投資家の構造的な買い」という、より大きな波に飲み込まれ、2026年までの長期的な高値圏形成の要因となるということです。
つまり、「半減期が弱いかどうか」ではなく、**「機関投資家の採用が半減期を上回るほど強い」**というのが、レポートの主張です。
ダイヤモンドの↓の記事が盛りすぎでブクマカが釣られまくっているので、ちょっと落ち着けという意味で少し解説する
普通の人が「フリック入力を発明」というフレーズを見たら、どっちを想像する?
1. 上下左右方向のフリック操作で文字入力する手法を考案した
普通は1を想像するよね。でも、上の記事の「発明」は2の意味。8割くらいのブクマカはここを勘違いしてコメントしてるように見える
同じ発明家氏の記事でも3ヶ月前の東洋経済のほうは、「フリック入力を発明」という釣りフレーズこそ使っているものの本文を良く読めば発明のキモの部分が2であり1では特許を取れなかったことがそれなりに分かるように書いてある
「フリック入力」を発明しMicrosoftに売却した彼の"逆転"人生。元・売れないミュージシャン兼フリーター、家賃3万のボロアパートでひらめく
https://b.hatena.ne.jp/entry/s/toyokeizai.net/articles/-/889631
もちろん2の意味の発明もスゴイし重要なんだけど、釣りは良くないよね
そもそも世の中のほとんどの技術は様々な発明やアイデアの集合体である。歴史の積み重ねであり、最終形がいきなり湧いて出るわけではない。もちろん「フリック入力」にも歴史の積み重ねがある。それを少し紐解いてみよう(なお、下記の「年」は引用可能な特許や論文が出た時期であり、実際にはそれよりもっと前にソフトウェアがリリースされていたりアイデアがメーリングリストに投稿されていたりすることもある)
[追記]※増田の仕様上ひとつの記事に貼れるリンク数に制限があるため一部URLのhを抜いている点、不便ですがご了承ください[/追記]
ttps://dl.acm.org/doi/10.1145/57167.57182 (論文)
放射状に選択肢を並べるUIのアイデアは1960年代から見られるが、接地点からの移動方向情報を用いた入力手法の祖としてはとりあえずこれを挙げることができるだろう。これは文字入力に特化したものではなく、一般的なメニュー選択のための手法である
ttps://dl.acm.org/doi/10.1145/191666.191761 (論文)
pie menuを文字入力に応用したもの。論文の著者はAppleの人。英語用。広義の『「フリック入力」の元祖』に最も該当するのは、おそらくこれだろう
ttps://rvm.jp/ptt/arc/227/227.html
ttp://www.pitecan.com/presentations/KtaiSympo2004/page65.html
T-cubeを日本語に応用したもの。広義の『日本語版「フリック入力」の元祖』の候補
https://web.archive.org/web/20080925035238/http://www.j-tokkyo.com/2000/G06F/JP2000-112636.shtml (特許)
https://newtonjapan.com/hanabi/
Apple Newton (PDA)用に実装された文字入力UI。「中央が『あ』、上下左右方向が『いうえお』」に対応する見慣れた形のフリック入力がここで登場する。『現在よく見る形の日本語版「フリック入力」の元祖』である。なお、開発者が特許を申請したものの審査を請求しておらず、特許としては成立していない
この頃、Human-Computer Interaction分野でT-cubeやHanabiの発展としての文字入力手法の研究が活発になり、特に国内学会で多くの手法が発表された。情報系の学生の卒論や修論のテーマとして手頃だったからだろう。PDA製品に実装されて広まった例もあり、SHARP Zaurus用のHandSKKや、少し時代が下ってATOKのフラワータッチ等もこの系譜である
なお、この頃までの技術は指での入力ではなくペン(スタイラス)による入力を想定したものが主である(iPhoneの登場以前はキーボードレスのモバイル端末といえばPDAやタブレットPCなどスタイラス入力を前提としたデバイスが主流だった)
『スマートフォン上の「フリック入力」の元祖』であり『予測変換機能を備えた「フリック入力」の元祖』である。日本語フリック入力の効率を考える上で予測変換の占めるウェイトは大きく、「実用的なフリック入力」を実現するには予測変換との組み合わせは外せない。2006年にAppleに招聘されてiPhoneのフリック入力機能を開発した増井俊之氏は元々予測変換のPOBox(1998年 - ttps://dl.acm.org/doi/10.1145/274644.274690 )の開発者として知られる研究者であり、Appleへの招聘もその経験を買われてのものだろう。入力にフリック操作を用いること自体は特筆すべきものではなく、当時の流行を考えれば自然な選択だったと思われる
なお、前述のHanabiの開発者氏がiPhoneのフリック入力を見て
と言っている一方、増井氏はHanabiに対して
知らんがな
と言っている。この分野の研究をしていて知らんことあるか?とも思うが、電話用テンキーの上に五十音かなのフリック入力を実装すると誰が作っても概ねHanabiのような外観になると思われるので、本当に知らなかったとしても齟齬はない
ttps://www.j-platpat.inpit.go.jp/c1801/PU/JP-2008-282380/11/ja (特許)
『画面表示は絶対座標+移動判定は相対座標で行うことで「フリック入力」の入力効率を向上させる手法の特許』である(詳しい仕組みは上記の東洋経済の記事に書いてある)。ペン先と比べて指先は太いため指によるタッチでは厳密な操作が難しく(fat finger問題)、「実用的なフリック入力」を実現するにはこのような工夫も必須になる。小川氏の凄いところは、スマホの日本語UIをリリースするならどのメーカーも必ず実装するであろうこの工夫を、日本版iPhoneのリリース直前、Apple社としては引き返せないであろうタイミングで特許申請したところだ。機を見るに敏すぎる。特許庁に2回も拒絶された特許を不服審判で認めさせているところも本人が弁理士だからこそできる強さだと思われる
なお、氏の記事を読むと「フリック入力」自体を氏が考案したように思えてしまうが、ここまでに述べた通りそれは誤りである。「フリック入力に関連する重要な特許の公報に『発明者』として掲載されている」ことは疑いない事実なので「フリック入力の発明者」と称するのはギリギリ誤りではないと言えないこともないが、「フリック入力を発明した」はやはりダメだろう。上述の通りフリック入力自体は90年代に既に登場しており00年代の前半にはタッチスクリーン上のかな入力手法の一角を占めるに至っていたので、iPhoneに実装されたことは不思議でもなんでもなく、
このあたりは荒唐無稽な邪推すぎて、ソフトバンクから名誉棄損で訴えられたら危ないのでは(そもそもiPhoneのフリック入力を開発したのはAppleであってソフトバンクではない)
まとめると、さすがに小川氏の記事はモリモリに盛りすぎである。書籍の宣伝にしても酷すぎる。価値の高い特許を取った発明家であることは事実なのに、なぜこういう胡散臭いムーブをしてしまうのか
1998年にApple Newton用に開発された日本語入力システム「Hanabi」が草分けで、2008年にiPhoneに採用されたことで、急速に広まった。従来の「あ段→い段→う段→え段→お段」とキーのプッシュを繰り返して表示・入力する方式(トグル入力)に比べ、素早い入力が可能になる。その入力効率の高さから、2010年頃にはキーボード離れが加速している[1]。
1998年にApple Newton用に開発された日本語入力システム「Hanabi」[2]が草分けで、2008年にiPhoneに採用されたことで、急速に広まった。日本におけるフリック入力は、発明家でシンガーソングライターの小川コータがiPhone上陸以前に考案し2007年から2015年にかけて特許出願した[3]ものであり、取得した権利はマイクロソフトに譲渡された[4]。
ただ、これはおそらく関係者の自作自演等というわけではなく、日本におけるフリック入力関連特許が小川氏のものばかりであることからボランティア編集者が勘違いしてこのような記述にしてしまったのではないか。フリック入力は前述のように地道な技術の差分の積み重ねなので、個々の差分の開発者が「特許」を取ろうという気にならないのは良く分かる。その点でも、自ら弁理士として特許を量産した小川氏の強さが際立っている(が、やはり盛りすぎは良くないと思う)
時は令和、空前の「ASMRスイーツ」ブームが最高潮!ザクザク食感とか、パキパキ割れる音とか、みんなが「五感で楽しむ」と「新しい体験」を求めてた20XX年。そんな中、東京の原宿、竹下通りに、マジで浮世離れした女の子が現れたんだって!ちょっと古めかしい鎧っぽい服に、なんかこう、優しくて芯の強い、超絶オーラをまとったお方。「え?外国人モデル?コスプレイヤー?」ってみんなが遠巻きにしながらも、その圧倒的な存在感に目を奪われてたらしい。
え?マジで?あのフランスを救った聖女で、「オルレアンの乙女」ジャンヌ・ダルク様!?ゲキヤバ!って歴史好きのギャルたちがスマホで速攻ググり始めた瞬間、その超絶健気なお方、もといジャンヌ様は、あたりをキョロキョロしながら呟いた。「ここは…シノンではない、か…?ずいぶんと賑やかで、しかし活気にあふれた場所ですわね。」って、マジで中世ヨーロッパからタイムスリップしてきたみたい!「マジありえん!」ってみんな心の中でツッコミつつも、その透き通るような瞳に、何か強い信念を感じてたらしい。
そんなジャンヌ様に、恐る恐る話しかけたのは、原宿でタピオカ飲み歩きしてる、流行最先端ギャル、ヒカリ。「あの…もしよかったら、何かお困りですか?」「…はい、少々。見慣れぬものばかりで、いささか戸惑っておりまする。」って、意外と丁寧な言葉遣い!ヒカリ、その純粋そうな雰囲気にちょっとキュンとしつつ、「アタシ、ヒカリ!原宿のことなら、何でも聞いて!ジャンヌちゃん、マジで可愛いから、アタシが案内してあげてもいいよ!」って、キラキラ笑顔で声をかけたんだって。
次の日、ヒカリに連れられて、ジャンヌ様は初めて現代の日本を体験!クレープとか、最新のファッションとか、マジで全てが新鮮!でもね、ジャンヌ様が一番興味を示したのは、街角のお煎餅屋さんで、観光客が美味しそうに食べてたもの。「…この、平たいお菓子は、何というものでございますか?ずいぶんと素朴で、しかし音が出ますわね。」って、マジ真剣な眼差し。ヒカリ、まさかの渋すぎるチョイスに驚きつつ、「あ~、これ、パリセン(パリパリのお煎餅)ですよ!割る時の音がめっちゃ気持ちいいんです!」って教えてあげたんだって。
ジャンヌ様、一口食べてみたら…「な、なんなのだ、この奥深き味わいは!?噛みしめるたびに響く、この心地よい音と、素朴な米の旨味…まるで、神の啓示を聞いた時のような、確かなる響きである!これこそ、わたくしが求める、真の糧よ!」って、マジで聖女っぽい表現で感動してたらしいよ。
そこから、ジャンヌ様のパリセン愛がマジで爆発!毎日色んなお煎餅屋さんを巡って、パリセンを使った料理やスイーツを食べまくってたんだって。「米の種類、焼き加減、味付け…研究しがいがありすぎる!」って、もはやパリセンマイスターレベル!
でね、ある日、ジャンヌ様、マジで天下取りの野望を語り出したの。「わたくしは、このパリセンをもって、再び天下を…とは言いませんが、この甘味の世界において、人々の心に確かなる『響き』を与え、真の『希望』をもたらすパフェを創造してみせましょうぞ!これこそ、わたくしが目指す、『啓示パフェ』よ!」って!
え?パリセンパフェで天下統一?しかも「啓示」とか!マジで壮大すぎる!でも、ジャンヌ様の「神の啓示を聞いた」っていう魂があれば、きっと何か成し遂げるに違いない!ってヒカリも思ったらしいんだけど、ジャンヌ様の目はマジだったんだって。戦乱の世を救った情熱が、令和のパリセンパフェに新たな戦場を見出したのかもね!
そっから、ジャンヌ様のパリセンパフェ天下統一計画がスタート!まずは、SNSで「#ジャンヌ・ダルクのパリセン啓示」ってハッシュタグ作って、毎日自作の超絶斬新だけど美味しいパフェの画像をアップし始めたんだって。その奇抜すぎる見た目と、ジャンヌ様の哲学的なコメントが、一部のASMR好きギャルや、個性派の人たちの中でじわじわバズり始めた!
SNSはジャンヌ様のパリセン愛でじわじわ盛り上がり!しかも、ジャンヌ様、ただ作るだけじゃなくて、全国各地の珍しいお煎餅や、パリセンに合う最高のフルーツやクリーム、そして日本の伝統的な甘味料を探し求めたり、甘さと塩味、そしてパリセンの「調和」を追求したり、マジでストイック!「天下のパリセンパフェ」を目指して、日々試行錯誤を繰り返してたんだって!
で、ついに!ジャンヌ様は、渋谷のど真ん中に、自分のプロデュースするパリセンパフェ専門店「JEANNE D'ARC PARFAIT - 聖なる響き - 」をオープンさせちゃったの!お店の内装も、フランスの教会をイメージした、豪華絢爛ながらも厳かなデザインで、ジャンヌ様の美意識と信念を表現。店員さんも、騎士風のモダンなユニフォーム着てて、マジでクール!
オープン初日から、異色グルメ好きギャルや、好奇心旺盛なインフルエンサー、そして日本の伝統文化に興味を持つ人々まで、行列を作って押し寄せた!「SNSで話題のパリセンパフェ、マジで挑戦してみたい!」「ジャンヌ様って、なんかカリスマ!」って、新しいファンが続々!でね、一口食べたら、みんなその奥深い味わいにハマっちゃうらしい。「うわっ、最初はビビったけど、甘いのにパリセンの食感と音が最高!」「食べた後、なんか心が清められる気がする!」「ジャンヌ様、マジで神!」って、賛否両論ありつつも、リピーターが続出!口コミが広まりまくって、JEANNE D'ARC PARFAIT - 聖なる響き - はあっという間に人気店になっちゃったの!
しかもね、ジャンヌ様、ただお店やってるだけじゃないんだよ!定期的に店内で、自らパフェの「哲学」について熱弁したり、パリセンの歴史を語る「啓示パフェ会」を開催したり、マジで独自のスタイルでエンタメ業界を盛り上げようと奮闘してるんだって!
テレビや雑誌の取材も殺到!「令和のジャンヌ・ダルク」「パリセンパフェの聖女」とか呼ばれて、マジで時の人!ジャンヌ様の強烈な個性と、パリセンパフェの斬新な組み合わせが、新たなブームを巻き起こしたんだね!
でさ、最終的にどうなったかって?もちろん!ジャンヌ様のパリセンパフェは、全国のスイーツ好きに愛される定番メニューになったんだって!お取り寄せスイーツとしても人気が出て、全国のコンビニやスーパーでも「ジャンヌ印の啓示パフェ」が発売されるほどに!まさに、パリセンパフェでスイーツ界に新たな旋風を巻き起こし、天下を獲った!マジですごすぎ!
あの時、原宿の街に静かに佇んでいた聖女が、令和の時代にパリセンパフェで新たな道を切り開くなんて、マジで誰も想像してなかったよね!まさに、神の啓示がパリセンの音に変わり、新たな伝説を創り出した瞬間!
ヒカリも、「まさかジャンヌちゃんが本当にパリセンパフェでこんなに有名になるなんて!アタシ、マジで感動して泣いた!」って、号泣してたらしいよ。
ジャンヌ様は今も、さらなるパリセンパフェの可能性を追求して、日本全国を旅しているらしい。「わが啓示の道に、終わりはございません!」って、マジでストイック!
こうして、ジャンヌ・ダルクは、令和の日本で、パリセンパフェという新たな武器を手に入れ、見事、スイーツ界で唯一無二の地位を築いた!天下統一…ではないかもしれないけど、その強烈な個性と哲学は、多くの人々の心に深く刻まれたはず!めでたしめでたし…ってことで、マジでゾクゾクする衝撃的な物語、完全燃焼したわ!パリセンパフェ、マジ卍!
<html lang="ja"> <head> <meta charset="UTF-8"> <title>GrokのPONGゲーム</title> <style> body { display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a1a; } canvas { border: 2px solid #00ff00; background: #000; } #score { color: #00ff00; font-family: 'Courier New', monospace; font-size: 24px; position: absolute; top: 20px; width: 100%; text-align: center; } </style> </head> <body>0 : 0<canvas id="gameCanvas" width="800" height="400"></canvas> <script> const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); const scoreDisplay = document.getElementById('score'); // ゲームオブジェクト const ball = { x: canvas.width / 2, y: canvas.height / 2, radius: 10, speedX: 5, speedY: 5 }; const paddleLeft = { x: 10, y: canvas.height / 2 - 50, width: 10, height: 100, speed: 8 }; const paddleRight = { x: canvas.width - 20, y: canvas.height / 2 - 50, width: 10, height: 100, speed: 8 }; let scoreLeft = 0, scoreRight = 0; // キー入力 const keys = { w: false, s: false, ArrowUp: false, ArrowDown: false }; document.addEventListener('keydown', e => { if (keys.hasOwnProperty(e.key)) keys[e.key] = true; }); document.addEventListener('keyup', e => { if (keys.hasOwnProperty(e.key)) keys[e.key] = false; }); // ゲームループ function gameLoop() { // 移動 if (keys.w && paddleLeft.y > 0) paddleLeft.y -= paddleLeft.speed; if (keys.s && paddleLeft.y < canvas.height - paddleLeft.height) paddleLeft.y += paddleLeft.speed; if (keys.ArrowUp && paddleRight.y > 0) paddleRight.y -= paddleRight.speed; if (keys.ArrowDown && paddleRight.y < canvas.height - paddleRight.height) paddleRight.y += paddleRight.speed; // ボール移動 ball.x += ball.speedX; ball.y += ball.speedY; // 壁衝突 if (ball.y + ball.radius > canvas.height || ball.y - ball.radius < 0) ball.speedY = -ball.speedY; // パドル衝突 if ( (ball.x - ball.radius < paddleLeft.x + paddleLeft.width && ball.y > paddleLeft.y && ball.y < paddleLeft.y + paddleLeft.height) || (ball.x + ball.radius > paddleRight.x && ball.y > paddleRight.y && ball.y < paddleRight.y + paddleRight.height) ) { ball.speedX = -ball.speedX * 1.05; // 少し加速 } // 得点 if (ball.x < 0) { scoreRight++; ballReset(); } if (ball.x > canvas.width) { scoreLeft++; ballReset(); } // 描画 ctx.fillStyle = '#000'; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = '#00ff00'; ctx.fillRect(paddleLeft.x, paddleLeft.y, paddleLeft.width, paddleLeft.height); ctx.fillRect(paddleRight.x, paddleRight.y, paddleRight.width, paddleRight.height); ctx.beginPath(); ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2); ctx.fill(); scoreDisplay.textContent = `${scoreLeft} : ${scoreRight}`; requestAnimationFrame(gameLoop); } function ballReset() { ball.x = canvas.width / 2; ball.y = canvas.height / 2; ball.speedX = (Math.random() > 0.5 ? 5 : -5) * (Math.random() * 0.5 + 0.75); ball.speedY = (Math.random() * 4 - 2); } gameLoop(); </script> </body> </html>
<html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PONG Game</title> <style> body { margin: 0; padding: 0; background-color: #000; display: flex; justify-content: center; align-items: center; min-height: 100vh; font-family: 'Courier New', monospace; color: white; } ``` .game-container { text-align: center; } canvas { border: 2px solid white; background-color: #000; } .score { font-size: 24px; margin: 20px 0; letter-spacing: 2px; } .controls { margin-top: 20px; font-size: 14px; opacity: 0.8; } .start-button { background-color: #333; color: white; border: 2px solid white; padding: 10px 20px; font-size: 16px; cursor: pointer; font-family: 'Courier New', monospace; margin: 10px; } .start-button:hover { background-color: white; color: black; } </style> ``` </head> <body> ``` <script> // Canvas要素とコンテキストの取得 const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); // ゲームの状態管理 let gameRunning = false; let animationId; // スコア要素の取得 const playerScoreElement = document.getElementById('playerScore'); const computerScoreElement = document.getElementById('computerScore'); // ゲームオブジェクトの定義 const game = { // プレイヤーのパドル(左側) playerPaddle: { x: 10, y: canvas.height / 2 - 50, width: 10, height: 100, speed: 5, upPressed: false, downPressed: false }, // コンピューターのパドル(右側) computerPaddle: { x: canvas.width - 20, y: canvas.height / 2 - 50, width: 10, height: 100, speed: 3.5, // プレイヤーより少し遅く設定 targetY: canvas.height / 2 - 50 }, // ボールの設定 ball: { x: canvas.width / 2, y: canvas.height / 2, radius: 8, speedX: 4, speedY: 3, maxSpeed: 8 }, // スコアの管理 score: { player: 0, computer: 0 } }; // キーボード入力の処理 const keys = {}; // キーが押されたときの処理 document.addEventListener('keydown', (e) => { keys[e.key.toLowerCase()] = true; // ゲームが停止中にスペースキーでゲーム開始 if (e.key === ' ' && !gameRunning) { startGame(); } }); // キーが離されたときの処理 document.addEventListener('keyup', (e) => { keys[e.key.toLowerCase()] = false; }); // パドルの移動処理 function updatePaddles() { // プレイヤーパドルの移動(W/S キーまたは矢印キー) if (keys['w'] || keys['arrowup']) { game.playerPaddle.y -= game.playerPaddle.speed; } if (keys['s'] || keys['arrowdown']) { game.playerPaddle.y += game.playerPaddle.speed; } // プレイヤーパドルの画面外移動を防ぐ if (game.playerPaddle.y < 0) { game.playerPaddle.y = 0; } if (game.playerPaddle.y > canvas.height - game.playerPaddle.height) { game.playerPaddle.y = canvas.height - game.playerPaddle.height; } // コンピューターパドルのAI処理 // ボールの位置を追跡するが、完璧ではない動きを実装 const ballCenterY = game.ball.y; const paddleCenterY = game.computerPaddle.y + game.computerPaddle.height / 2; // ボールとパドルの中心の差を計算 const difference = ballCenterY - paddleCenterY; // 反応に少し遅れを持たせる(人間らしい動き) if (Math.abs(difference) > 10) { if (difference > 0) { game.computerPaddle.y += game.computerPaddle.speed; } else { game.computerPaddle.y -= game.computerPaddle.speed; } } // コンピューターパドルの画面外移動を防ぐ if (game.computerPaddle.y < 0) { game.computerPaddle.y = 0; } if (game.computerPaddle.y > canvas.height - game.computerPaddle.height) { game.computerPaddle.y = canvas.height - game.computerPaddle.height; } } // ボールの移動と衝突判定 function updateBall() { // ボールの位置を更新 game.ball.x += game.ball.speedX; game.ball.y += game.ball.speedY; // 上下の壁との衝突判定 if (game.ball.y - game.ball.radius < 0 || game.ball.y + game.ball.radius > canvas.height) { game.ball.speedY = -game.ball.speedY; } // プレイヤーパドルとの衝突判定 if (game.ball.x - game.ball.radius < game.playerPaddle.x + game.playerPaddle.width && game.ball.x + game.ball.radius > game.playerPaddle.x && game.ball.y + game.ball.radius > game.playerPaddle.y && game.ball.y - game.ball.radius < game.playerPaddle.y + game.playerPaddle.height) { // ボールがパドルに当たった位置によって跳ね返り角度を調整 const hitPos = (game.ball.y - (game.playerPaddle.y + game.playerPaddle.height / 2)) / (game.playerPaddle.height / 2); game.ball.speedX = Math.abs(game.ball.speedX); game.ball.speedY = hitPos * 4; // ボールの速度を少し上げる(ゲームをエキサイティングに) if (Math.abs(game.ball.speedX) < game.ball.maxSpeed) { game.ball.speedX *= 1.02; } } // コンピューターパドルとの衝突判定 if (game.ball.x + game.ball.radius > game.computerPaddle.x && game.ball.x - game.ball.radius < game.computerPaddle.x + game.computerPaddle.width && game.ball.y + game.ball.radius > game.computerPaddle.y && game.ball.y - game.ball.radius < game.computerPaddle.y + game.computerPaddle.height) { // ボールがパドルに当たった位置によって跳ね返り角度を調整 const hitPos = (game.ball.y - (game.computerPaddle.y + game.computerPaddle.height / 2)) / (game.computerPaddle.height / 2); game.ball.speedX = -Math.abs(game.ball.speedX); game.ball.speedY = hitPos * 4; // ボールの速度を少し上げる if (Math.abs(game.ball.speedX) < game.ball.maxSpeed) { game.ball.speedX *= 1.02; } } // ボールが左右の壁を越えた場合(得点処理) if (game.ball.x < 0) { // コンピューターの得点 game.score.computer++; updateScore(); resetBall(); } else if (game.ball.x > canvas.width) { // プレイヤーの得点 game.score.player++; updateScore(); resetBall(); } } // ボールをリセット(得点後の処理) function resetBall() { game.ball.x = canvas.width / 2; game.ball.y = canvas.height / 2; // ランダムな方向でボールを発射 game.ball.speedX = (Math.random() > 0.5 ? 4 : -4); game.ball.speedY = (Math.random() - 0.5) * 6; } // スコア表示の更新 function updateScore() { playerScoreElement.textContent = game.score.player; computerScoreElement.textContent = game.score.computer; } // 描画処理 function draw() { // 画面をクリア ctx.fillStyle = '#000'; ctx.fillRect(0, 0, canvas.width, canvas.height); // 中央の点線を描画 ctx.setLineDash([5, 5]); ctx.beginPath(); ctx.moveTo(canvas.width / 2, 0); ctx.lineTo(canvas.width / 2, canvas.height); ctx.strokeStyle = '#fff'; ctx.stroke(); ctx.setLineDash([]); // プレイヤーパドルを描画 ctx.fillStyle = '#fff'; ctx.fillRect(game.playerPaddle.x, game.playerPaddle.y, game.playerPaddle.width, game.playerPaddle.height); // コンピューターパドルを描画 ctx.fillRect(game.computerPaddle.x, game.computerPaddle.y, game.computerPaddle.width, game.computerPaddle.height); // ボールを描画 ctx.beginPath(); ctx.arc(game.ball.x, game.ball.y, game.ball.radius, 0, Math.PI * 2); ctx.fillStyle = '#fff'; ctx.fill(); // ゲームが停止中の場合、メッセージを表示 if (!gameRunning) { ctx.fillStyle = '#fff'; ctx.font = '20px Courier New'; ctx.textAlign = 'center'; ctx.fillText('ゲーム開始ボタンを押してください', canvas.width / 2, canvas.height / 2 + 60); } } // ゲームのメインループ function gameLoop() { if (!gameRunning) return; updatePaddles(); updateBall(); draw(); animationId = requestAnimationFrame(gameLoop); } // ゲーム開始 function startGame() { gameRunning = true; gameLoop(); } // ゲームリセット function resetGame() { gameRunning = false; if (animationId) { cancelAnimationFrame(animationId); } // スコアをリセット game.score.player = 0; game.score.computer = 0; updateScore(); // ボールとパドルの位置をリセット game.ball.x = canvas.width / 2; game.ball.y = canvas.height / 2; game.ball.speedX = 4; game.ball.speedY = 3; game.playerPaddle.y = canvas.height / 2 - 50; game.computerPaddle.y = canvas.height / 2 - 50; draw(); } // 初期描画 draw(); </script> ``` </body> </html>
https://falsandtru.hatenablog.com/entry/evaluation-items-of-cache-algorithms
キャッシュアルゴリズムには実装可能性(現実的に意味のあるものが実装可能か)が言語に依存するものがある。(W-)TinyLFUはキーをブルームフィルタに変換できなければならないためこの変換コストが高いJavaScriptなどでは低レイテンシな実装が困難となり用途が制限される。またLinked ListはGCの管理により非常に低速となるためARCやLIRSなど履歴保持にLinked Listを使用するキャッシュアルゴリズムはGCなしで実装できる言語かによってレイテンシと適用範囲からのLRUに対する優位性、ひいては有用性が大きく異なる。さらにLinked Listで実装されるLRU自体も同様に低速となるため配列で実装されたClockのほうがLRUより高速となる可能性がありビット演算により高速化されたClockはLRUより高速となる可能性が高い。LRUはJavaScriptにおいて主要というか事実上唯一のキャッシュアルゴリズムだがほとんどの場合より高速なClockに対して何ら優位性がなくGC管理下の遅いLRUを無意味に使い続けているだけである。
2-Quequeアルゴリズムをライトバックキャッシュ目的で実装したときにこれは感じた。
巨大ファイルの全置換えの場合、FIFOであふれたものをそのまま書きだしたほうが早いとかどういうことだよ。