1 ポイント 投稿者 GN⁺ 2025-01-13 | 1件のコメント | WhatsAppで共有

Bad Appleをvimで再生する

  • Bad Appleとは?

    • Bad Appleは視覚的に魅力的なミュージックビデオで、さまざまな場所に埋め込まれてミームとして使われている。
    • スマート冷蔵庫でDOOMを動かすのと似たミームとして認識されている。
  • フレームを取得する

    • Bad Appleの各フレームのデータを取得するためにFelixoofedのリポジトリをクローンし、約6,500枚のPNGに変換。
    • Pythonコードを使って各PNGを0と1で構成された2D配列に変換。
  • vimで描画する

    • テキストグリッドに画像を挿入することで、vim上で画像を描画できる。
    • vimのハイライト機能を使って、マッチした文字に同じ色を適用。
    • 正方形フォントを使って正方形のピクセルを実現。
  • 任意の長方形を描画する

    • vimの検索機能を活用して、特定の行と列にマッチするパターンを生成。
    • 複数のパターンをOR演算子で結合し、複数の長方形を一度に描画できる。
  • フレームを長方形に変換する

    • 90x120グリッドを長方形に分解して検索文字列を生成。
    • さまざまなアルゴリズムを使って最適な検索パターンを選択。
  • vimで実行する

    • vimマクロを使って動画を再生。
    • マクロは検索パターンを設定し、次の行へ移動して繰り返し実行できる。
  • 締めくくり

    • このプロジェクトは1日で完成しており、さらに時間をかければいくつかの改善点を検討できる。
    • Recurse Centerで最初の週にこのプロジェクトを発表し、好意的な反応を得た。
    • コードは複雑だが、興味があればGitHubで確認できる。

1件のコメント

 
GN⁺ 2025-01-13
Hacker Newsのコメント
  • Nolenの1,000倍の性能向上という主張への、信頼をめぐるユーモラスな反応。過去に似たような手法は使ったことがあるが、1日で全部はやっていない

    • Bad Matrix: ターミナルにブロックを出力する方法
    • Animating Text Art in Javascript: 固定グリッドにテキストを出力してアニメーション効果を出す方法
    • oxo: ターミナルに三目並べの盤面を出力し、正規表現を使って結果を確認する方法
    • Bad Appleが最も印象的
  • NESでBad Appleを動かす技術デモに感銘を受けたというコメント。Everdriveで動作するBad Appleを見せるリンクも共有

    • 音声付きで、データサイズは約1GB。通常のゲームが数百KBしかないようなシステムで動作している
  • Vimマクロを次の行へ進めて「再生可能」にする方法の説明。マクロを1行ずつ実行するコマンドも紹介

  • 先月販売されていたGoveeカーテンライトについての情報。アニメーションGIFをアップロードでき、「bad apple」のGIFを作る予定とのこと

  • 長方形最小化問題についての意見。StackOverflowで議論されていた問題とは異なり、入れ子が許容されるVimプロジェクトについての説明

  • 並列な候補解生成器は良いアイデアだという意見。最適なアルゴリズムを作る必要はないと気づくまで時間がかかった

  • 2006年ワールドカップを、職場からSSH経由で自宅サーバーに接続してターミナルで視聴した経験の共有。帯域不足で他の方法は不可能だった

  • 創造的なアイデアへの好意的な反応。元になったゲームも良く、弾幕ゲームは催眠的だとのこと

  • 作業にかかったおおよその時間についての質問

  • 著者自身も認めているように、これはVimではあるが正規表現ではなく「画面座標検索」。Vimで描画しているが、パターンマッチングではない