ジムのトルートタイプQRコードフォント

2026/07/08 1:30

ジムのトルートタイプQRコードフォント

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

本稿で提示される主な革新は、標準文書内において角括弧で囲まれたテキストを機能性の QR コードに変換する新規の OpenType フォントファミリーです。このツールを使用すると、専門的なソフトウェアを必要とせずにスキャン可能なデータを埋め込むことができ、周辺テキストが読みやすいまま、シンボルあたり最大 53 文字(qrfont-1L.ttf、qrfont-2L.ttf、qrfont-3L.ttf の 3 つの異なるバージョン)を符号化することができます。

技術的には、このソリューションはバイトモードやリード・ソロモンパリティ論理といった高度なアルゴリズムに依存しており、これらはスキャン時のデータ整合性を保証するための誤り修正システムとして機能します。これらの論理的構造は、GGSUB フィーチャースクリプトを使用して形の変換を動的に管理するように TrueType ファイルへとコンパイルされます。デフォルトでは、フォントはリベレーション・サンズレギュラーを採用した基礎フォントとし(ただし

--base-font
を使用することでカスタムフォントを指定できます)、グリフアウトラインと論理が
dist/
ディレクトリに生成されます。ビルドプロセス中に Python 依存関係の管理には
uv
が利用されています。

今後の開発としては、配布フォルダ内の

index.html
を介してアクセスできるインタラクティブなデモが含まれており、ここで角括弧で囲まれたフレーズを試すことができます。現在、QR ブロック内での入力は印刷可能な ASCII に限定されていますが、この概念証明は、単純な置換を通じて日常の読みやすいテキストに直接スキャン可能なデータを統合するための有望な手法を実証しています。生成されたフォントは、基礎フォントの変種として SIL Open Font ライセンスバージョン 1.1 でライセンスされています。

本文

実験的 OpenType フォント「QR Font」

このプロジェクトでは、角括弧

[]
で囲まれたテキストを QR コードに変換し、それ以外のテキストは通常通りに表示するための実験的な OpenType フォントを生成します。

リンクとダウンロード

  • ライブデモ: https://qr.jim.sh/
  • フォントファイル:
    • qrfont-1L.ttf
      : 21×21 モジュール、最大 17 キャラクター
    • qrfont-2L.ttf
      : 25×25 モジュール、最大 32 キャラクター
    • qrfont-3L.ttf
      : 29×29 モジュール、最大 53 キャラクター

基本仕様

すべてのフォントは以下の技術仕様を使用しています。

  • モード: バイトモード
  • 入力文字: プリント可能な ASCII キャラクターのみ
  • マスキングパターン: 固定値
    0
    (デフォルト)
  • デリミター(区切り記号):
    [ ]
  • 自動生成: グリフとロジックはプログラムで生成されています

ビルド方法

このプロジェクトでは Python の依存関係管理に

uv
を使用します。

デフォルトビルド

以下のコマンドを実行することで、全て機能(デリミターパーサー、バイト展開、リード・ソロモンパリティなど)を含むフォントが生成されます:

uv run tools/build_font.py

ソースフォントの変更

デフォルトでは

/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf
が使用されます。 別の TrueType ソースを使用する場合は以下のように指定します:

uv run tools/build_font.py --base-font /path/to/BaseFont-Regular.ttf

リード・ソロモンパリティ回路の動作確認

数千もの文脈依存ルックアップを出力し、レイアウト専用のビルドよりも時間がかかります。

# make パス(デフォルト)

高速なレイアウト専用ビルド

リード・ソロモンパリティ機能を実装せず、高速化したい場合:

uv run tools/build_font.py --no-parity

グリフストリームの確認

生成されたグリフを調べるためのコマンドです:

uv run tools/shape_debug.py '[a]' '[b]'

出力結果

ビルド完了後に以下のファイルが作成されます。

  • dist/qrfont-*.ttf
    : 生成された OpenType フォント(1-L, 2-L, 3-L)
  • dist/index.html
    : インタラクティブなウェブデモ
  • build/qrfont-*.fea
    : 生成された OpenType フィーチャーファイル

デモでの使い方

dist/index.html
をブラウザで開き、角括弧付きテキストを入力します。 例:
abc[def]ghi

  • 「abc」と「ghi」は通常のテキストとして表示されます。
  • その間に「def」が QR コードとしてレンダリングされます。

ライセンス

生成されたフォントは「Liberation Sans Regular」の修正版であり、SIL Open Font License バージョン 1.1 にてライセンスされています。 詳細については

LICENSE-OFL.txt
および
NOTICE.md
をご参照ください。

注意点: 「Liberation」はソースフォントのライセンス上、予約済み名のため、生成されたファミリー名は「QR Font 1-L」「QR Font 2-L」「QR Font 3-L」となっています。

備考・制限事項

  • コンセプト验证: これは OpenType のシェイピング機構(GSUB フィーチャー)をテストするためのフォントです。適用可能な環境が必要です。
  • 文字数制限: デリミター内に入れるテキストは、フォントバージョンによるが、17, 32, または 53 文字までに限られます。
  • 制限: 角括弧内のテキストのみが QR コードに変換され、それ以外のエリアは通常の表示に制限されます。

同じ日のほかのニュース

一覧に戻る →

2026/07/08 3:24

Kokoro を活用したローカル動作・CPU対応で高品質な TTS(テキスト対話)

## Japanese Translation: 2026 年 3 月 31 日にリリースされた Kokoro-82M は、わずか 8200 万パラメータだけで英語・中国語・ヒンディー語の極めてリアルな声を生成する特段に軽量な Text-to-Speech モデルです。CPU 上で完結するように設計されており、高価な GPU の依存を回避できます(GPU はローカルの LLL推論用に留保されます)。同モデルは AMD Ryzen チップを搭載した標準的なプロセッサ、Intel Core i7 システム、Apple M シリーズ CPU にもデプロイ可能です。ベンチマーク結果では、各種ハードウェア上で合成時間が 5 秒以内となっています:Intel Core i7-4770K で約 4.7 秒、Apple M2 Pro で 4.5 秒、短かい段落では AMD Ryzen 7 8745HS で低至くとも 1.5 秒です。 最も簡単なデプロイ方法では、プリダウンロード済みの音声モデルを含む Kokoro-FastAPI コンテナイメージ(約 5 GB)を使用します。ユーザーは `podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu` コマンドで Podman を使用してサービスを開始し、`localhost:8880/web` でウェブ UI にアクセスすることで、オーディオを直接生成・再生できます。コンテナは OpenAI 互換の音声 API を公開しており、JavaScript(`./speak.js`)および Python(`./speak.py`)スクリプトなどの実装例があります。音声モデルは環境変数 `TTS_VOICE` を使用して選択でき(全リストは HuggingFace で確認可能)、出力は MP3 ファイルとして保存され、SoX がインストールされている場合は自動再生も可能です。 音声認識と Text-to-Speech の両方が必要なアプリケーション向けには、オプションの Speaches コンテナ化サービスが Whisper とシームレスに統合され、また OpenAI API 互換性もサポートしています。リソース要求を低く抑えつつ、簡潔なデプロイオプションを提供することで、Kokoro-82M は自然で多言語の音声合成を開発者のワークフローや広範なアプリケーションに統合するためのハードルを大幅に低下させます。

2026/07/07 21:38

StreetComplete:1 つの小さなクエストで OpenStreetMap を修正していくプロジェクト

## Japanese Translation: StreetComplete は、誰でも現在地から OpenStreetMap の精度を向上させるシンプルな方法を提供します。アプリは生地図上に不足している情報を簡単な「クエスト」として表示し、利用者に特定の場所を訪れて短く質問に答えるよう促し、データギャップを埋めます。このアプローチにより、高度な編集スキルや専用ソフトがなくても OpenStreetMap が最新の状態を保つことができます。ユーザーがタスクを完了すると、その貢献は瞬時にグローバルデータベースで更新され、直ちにその名前でクレジットされます。このメカニズムにより、地図の改善は情報を収集した実際の観察者まで追跡可能になります。したがって、ナビゲーションや地域発見のためのストリートレベルの詳細はより正確かつ信頼性が高まります。究極的には、このツールはマッピングを民主化し、無関心な訪問者を能動的な貢献者に転換させます。これにより、遠隔編集や大規模な専門チームに依存することなく、簡単な現場での相互作用を通じて正確な地理データが継続的に拡張されるコミュニティが育まれます。

2026/07/07 23:23

Chat Control バージョン 1.0 と 2.0 の解説

## Japanese Translation: 欧州連合(EU)は、企業に対し、子供による性虐待資料(CSAM)を検出するために私信をスキャンすることを義務付ける有効期限を迎えた暫定権能(チャットコントロール 1.0,規制 EU 2021/1232)の復活を図ろうとしている。当初 2024 年 8 月 3 日に有効期限が切れる予定だったこの措置は、2 回延期された——最初に 2026 年 4 月 3 日(2024 年 4 月 29 日の議決)、続いてさらに 2028 年 4 月まで(2025 年 12 月 18 日の提案)。2026 年 3 月 26 日、下院での投票で改正案 34 が否決されず、その一方で不特定の写真やテキストの自動評価を禁止する改正案 34 が僅差(307 対 306)で可決されたことを受け、無効化措置に基づく自発的スキャンの法的根拠は 2026 年 4 月 4 日に終了した。にもかかわらず、主要プラットフォーム(Google、Meta、Microsoft、Snap)は自発的に引き続きスキャンを行うと発表した。 しかし、立法上の行き違いが生じている:欧州議会の LIBE 委員会は 2026 年 3 月 2 日に延期を拒否し、欧州議会は 2026 年 3 月 11 日、広範な自動分析に対する保護性指令を採用し、理事会は同年 3 月中旬に欧州議会の条件を拒否した。これに対し、EU の大使たちは 2026 年 6 月 26 日に手続の簡素化を通じて暫定復活を推進することに合意し、理事会は同年 7 月 2 日にも自らの立場を採用した。2026 年 7 月 7 日、欧州議会は緊急手続を承認するため 331 対 303 の投票を行い、その際に関連する委員会を bypass して、有効期限を迎えた特別措置を迅速処理する手続きをとった。この議題に対する法的拘束力のある投票は木曜日(7 月 9 日)に予定されており、絶対多数である 361 人の欧州議会議員の賛成が必要となる。 同時に、「チャットコントロール 2.0」と呼ばれる恒久解決策を確立するための努力も停滞している。委員会は 2022 年 5 月 11 日、プラットフォームに対し暗号化全体(エンドツーエンド)を迂回して検出と報告を行うことを求める恒久規制を提案した。2023 年 11 月、欧州議会は E2E スキャンに反対する保護性指令を採用し、視覚情報のみを対象とした分析、特定の裁判所命令の要件のみを受け入れること、また年齢認証の義務化を拒否することを要請した。2025 年 12 月から 2026 年 5 月までの 4回のトリログ(三回協議)ラウンドに加えて、2026 年 6 月 29 日の「最終」ラウンドも失敗に終わったが、チャットコントロール 2.0 に関する合意は依然として達されていない。 2026 年 6 月 10 日、理事会の法務部は、裁判所の承認なしに行われる自発的スキャンは、EU 基本権憲章第 7 条(プライバシーとデータ保護)に抵触する一般化されたスキャンであるとして警告した。恒久 CSA 規制について 5回のトリログラウンドが完了後なお合意に至らず、2025 年 10 月にドイツの議長国としての任務でリスク評価と軽減義務への重点が移行している状況において、EU は児童安全の強化とデジタル権限の維持という狭いバランスを navigate しなければならない。7 月 9 日の緊急投票は、国家関連のスキャン手続に議論を伴う形で再び導入することを強いるリスクがあり、これにより憲法上の保護や公共の信頼に関連する新たな法的課題が引き起こされる可能性がある。