タグ

ブックマーク / blog.bokuweb.me (107)

  • Rustから目覚めるぼくらのゲームボーイ! - undefined

    Conway氏についてですが、公式にアナウンスがでたようです。ご冥福をお祈り申し上げます。 www.math.princeton.edu 2003年に発売された「Linuxから目覚めるぼくらのゲームボーイ!」というC言語でゲームボーイアドバンスで動作する自作ゲームを作成していく書籍があります。 ゲームボーイアドバンスはARM7TDMIというコアを使用しており、Rustで自作ゲームを作ることも可能となっています。 この記事では「Linuxから目覚めるぼくらのゲームボーイ!」のステップをRustで実施するための準備としてライフゲームが動くまでを書いてみます。 動機は今作っているWasmインタープリタをGBAで動かすことができないかの調査です。(たとえLチカレベルでも)AssemblyScriptとかでGBAのゲームかけたら面白くないですか。 成果物 github.com I succeeded

    Rustから目覚めるぼくらのゲームボーイ! - undefined
    bokuweb
    bokuweb 2020/04/14
    かいた
  • Rustで書いたWebAssemblyインタプリタ上でGoで書いたゲームボーイエミュレータを動かした - undefined

    概要 最近はWebAssemblyに興味があり、勉強していたんだけど仕様を読み始めても頭に入らないのでインタプリタを作ってみることにした。よくわからないものは作ってみるのが一番よい。 github.com まだ残された課題は多いのだけれども、一つ目標にしていた「Goで書いたゲームボーイエミュレータを動かす」を達成できたのでここに書いておく。 うおーついにRustで書いた自作wasm interpreter上でgoで書いた自作gameboy emulatorが動いたー!けど1FPSくらいしかでない... pic.twitter.com/I5B2XL5E0W— bokuweb (@bokuweb17) 2020年2月24日 こツイートに貼られているのは残念ながら、静止画ではなく、動画でありパフォーマンスが悲しいことになっていることを示している。あまりに遅くてプレイ画面まで到達できない。今後これ

    Rustで書いたWebAssemblyインタプリタ上でGoで書いたゲームボーイエミュレータを動かした - undefined
    bokuweb
    bokuweb 2020/03/12
    かきました
  • Go Conference 2019 Autumn「GoでつくるGameBoyエミュレータ」を発表してきた - undefined

    表題の通りGo Conference 2019 Autumnで発表させていただきました。運営・スタッフの方々、スピーカーの方々、スポンサーの方々、発表を聞きに来てくださった方々、懇親会でお話させていただいた方々ありがとうございました。非常に楽しかったです。 今回は発表資料の補足や、質問いただいた内容の回答、補足などを記事としてまとめておこうと思い記事にしてみることにしました。 発表資料 発表資料は以下です。 speakerdeck.com 補足 発表がかなり駆け足になってしまったのと、資料だけではよくわからない箇所があると思うので補足を以下にあげていきます。 DEMO このページから遊ぶことができると思います。 bokuweb.github.io さぼってページに載せていないんですがキーマップは以下です。 keyboard game pad ← ← button ↑ ↑ button ↓

    Go Conference 2019 Autumn「GoでつくるGameBoyエミュレータ」を発表してきた - undefined
    bokuweb
    bokuweb 2019/11/06
  • ゲームボーイエミュレータをGo言語で書いた - undefined

    概要 Goはこれまで量を書いたことがなかったので入門にゲームボーイエミュレータを書いてみることにした。ゲームボーイである理由はたまたまよくできたゲームボーイの資料(http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf)を見つけてしまったため。 成果物 github.com まだ基的なカートリッジタイプしか実装できていないがそこそこ動き始めたので公開することにした。直近は対応カートリッジを増やしながらWebAssemblyを吐けるようにしたい。 ゲームボーイの基仕様 項目 概要 CPU LR35902 4.19MHz 8bit RAM 8kB VRAM 8KB ROM 256k~32MBit Display 4階調モノクロ、160×144ドット スプライト 8×8 最大40個表示 / 1ライン上に 最大10個表示 背景 256×256ドット ウィン

    ゲームボーイエミュレータをGo言語で書いた - undefined
    bokuweb
    bokuweb 2019/08/06
    ファミコンとの違いについても書いてみました
  • wasm-bindgenを使ってRustのモジュールをnode_modulesに持ってくる - undefined

    この記事はWebAssembly Advent Calendar 2018の21日目です。wasm-bindgenを使用して何かしてみたいと思っていたので、今回は以前Rustで実装した画像の差分を取るツールをwasm-bindgenを使用してnode_modulesとして使用できるようにしてみたいと思います。 adventar.org 移植元 github.com これはもともと、go-diff-image(https://github.com/murooka/go-diff-image)というgolang製のツールをRustへポーティングしたものになります。 github.com 同じピクセル同士を比較して差分を出力するのではなく、githubのdiffのような感じで画像の差分を可視化するツールです。 以下のような比較画像を生成します。 成果物 github.com 手順 さっそくミニマ

    wasm-bindgenを使ってRustのモジュールをnode_modulesに持ってくる - undefined
    bokuweb
    bokuweb 2018/12/22
    書いた
  • ファミコンのエミュレータをRust / WebAssembly で書き直した - undefined

    概要 以前、JSで書いた(ファミコンのエミュレータを書いた - undefined)ファミコンのエミュレータをRustで書き直してみた。 また、技術的な内容はQiitaの方にも書いているので興味のある方は参照してみてください。(まだ Hello, World!までしか書けてませんが。) qiita.com もともとファミコンのエミュレータって新しい言語を習得するのにちょうどいい題材だったりするのでは、って話しからスタートしてて、よくわからないのでJSで書いてみて、ようやくRustで一通りは実装できた感じ。まだバグや未実装(音声周りやマッパー)も多いんですが、ひとまずはお腹いっぱいな感じ。 成果物 github.com あと、いくつかのROMは以下で遊べるようにしてます。音が出るので注意してください。 またAPUの実装にまだバグが残っているのDCMチャンネルが未実装なので音が変だったり出てな

    ファミコンのエミュレータをRust / WebAssembly で書き直した - undefined
    bokuweb
    bokuweb 2018/02/08
    かきましたー
  • ファミコンのエミュレータを書いた - undefined

    概要 ファミコンのエミュレータをJSでだらだらと作ってた。そこそこ遊べるようになったので公開しておく。技術的な内容は、またどこかで発表したり、Qiitaなどにまとめたい。(忘れないうちに。需要があるかは怪しいが。) 随分昔に作ってみたいなーと思いFPGAでの実装を開始したんだけど、早々に挫折した覚えがある。今思うとFPGAの場合タイミングの問題が付き纏うのでJSで書くより圧倒的に難易度も高いし、ハードエミュレータを実装するにしても前段階としてソフトウェミュレータを実装するのが定石っぽいので無謀だったっぽい。 ひとまずMapper0という基的なカセット形式のみに対応し、スーパーマリオブラザーズがそこそこ遊べるくらいを目標とした。 成果物 github.com ファミコンのスペック MPU 6502(RP2A03), 8bit WRAM2KB VRAM 2KB 最大発色数 52色 画面解像度

    ファミコンのエミュレータを書いた - undefined
    bokuweb
    bokuweb 2017/09/20
  • Rust+wasmでライフゲーム - undefined

    Rustwasmの入門にライフゲームを書いてみた 成果物 github.com 以下のURLで動作を確認できますが、わらわらしてますので苦手な方は注意してください。 windowサイズを小さくすると60FPSでて楽しいです。 Game of life with rust + wasm 環境構築 環境構築は以下の記事を参考にさせてもらっています。 sbfl.net また「Think Web」の「Rust + WebAssembly でブラウザで動くLisp処理系を作る」も合わせて参考にさせてもらってます。 techbooster.booth.pm 実装 JS側からRust側へポインタを渡しておき、JS側のrequestAnimaionFrameからRust側から公開されているupdate関数を叩き、更新されたメモリをcanvasに反映するという構成を取っています。 Rust側とメモリを共有

    Rust+wasmでライフゲーム - undefined
    bokuweb
    bokuweb 2017/08/22
    かいた
  • wasm化したOpenCVでカメラ入力に笑い男を加えて描画する - undefined

    OpenCVで試したいことがあり、OpenCV + wasmで入門がてら顔認識を試して遊んでみました。 OpenCVのビルド wasmへのビルドは参考になるような記事を見つけられず、いろいろ試したものの成功しなかったんですが、ビルドを成功させているリポジトリが発見でき手順通り(cloneするリポジトリ名のみ間違ってて修正しましたが)にやることでビルドできました。 github.com 例えば顔認識分類器のデータの追加変更や任意のモジュールの追加、削除などを行うことを考えると自前でビルドできないと今後きつそうなんですが、正直良くわからないってのが現状です。このあたりは課題。 ビルド筋を鍛えようにも取っ掛かりもないような状態なので、おすすめの資料などがあれば、是非教えていただけると嬉しいです。 wasm Rustでいろいろ試しているが、その際以下の記事をよく参考にさせてもらったりしてます。 s

    wasm化したOpenCVでカメラ入力に笑い男を加えて描画する - undefined
    bokuweb
    bokuweb 2017/07/28
    かいた
  • 実装して学ぶRxJS - undefined

    実際にいくつかのオペレータを実装してみたらRxの気持ちがわかるかと思い実践してみました。 簡素化するために以下の方針とします。 unsubscribeしない errorハンドリングしない 実装してみたのは以下です。 of map subject filter delay fromPromise combineLatest switchMap Observable 何はともあれ、まずはObservableを実装します。 class Observable { constructor(producer) { this.subscribe = producer } } コードはこれだけで、producerを受け取って、自身のsubscribeに接続します。 producerはobserverを引数にとって、次に、どんなタイミングで、どんな値を流すか決定する関数です。 現時点ではイメージもわかないと

    実装して学ぶRxJS - undefined
  • Angular2 RC5への更新とステート管理の変更、power-assertによるテストまで試す - undefined

    概要 以前触ってみたときはRC3でRC5が出たらもう一回触るかってことで、以前作ったサンプルのRC5への更新、ステート管理の変更、ユニットテストについて試してみた。以前の記事は以下。 blog.bokuweb.me RC5への更新 情報収集をするとNgModuleが追加されたことが大きいようで、コンポーネントごとにdirectivesやpipesでの指定を行う必要がなくなり、stableでこの方法は廃止になるとのこと。現状、このサンプルにおいてはRC3のコードのまま動作するしwarningもでなかった。 詳細は以下で確認すると良さそう。 ng2-info.github.io ng2-info.github.io NgModuleの導入 まずは@NgModuleを使用してモジュールを作ることになる。前回コンポーネントごとに記述していたディレクティブはdeclarationsに記述することにな

    Angular2 RC5への更新とステート管理の変更、power-assertによるテストまで試す - undefined
    bokuweb
    bokuweb 2016/08/18
  • モダンCSSフレームワーク『Bulma』のReactコンポーネントセット『ReBulma』を作った - undefined

    概要 今年に入ってからのんびりTwitterClient(https://github.com/bokuweb/tsukiakari)を作っていて、こいつに使いたいなーと思いコンポーネントセット作った。といっても、まだかなり雑でまだまだやることがありそう。 以下のような記事もあって様々なReactコンポーネントセットがあるんだが、あまり気にいるものがなく作ってみることにした。有名ところはMateri-UIあたりになるんだろうけど、正直自分はMaterialデザインの色とか見た目があまり好きじゃないし、Material-UIの挙動が?(現在は改善されてるかも)だったり、Styleのみを閉じたシンプルなものが欲しいというのも理由のひとつになっている。 qiita.com Bulma BulmaはFlexboxベースのモダンCSSフレームワークで現在V0.1.0RC。どんな感じなのかは以下の公式

    bokuweb
    bokuweb 2016/08/01
  • golang入門するためにlifegame書いてみた - undefined

    タイトルとおりなんだけど、golang使ってみたいと思うケースが出てきて、入門のためまずはlifegameを書いてみた。 ルール ライフゲーム - Wikipedia 結果 github.com 16/7/16修正しました package main import ( "fmt" "math/rand" "time" ) type game struct { field [][]bool row int column int } func newGame(row, column int) *game { rand.Seed(time.Now().UnixNano()) p := new(game) p.row = row p.column = column p.field = make([][]bool, row) for r := 0; r < row; r++ { p.field[r]

    golang入門するためにlifegame書いてみた - undefined
    bokuweb
    bokuweb 2016/07/13
  • Angular2でReactのチュートリアルを試してみる - undefined

    bokuweb
    bokuweb 2016/07/11
    書いた
  • flowtypeを試してみる - undefined

    最初に この記事はflowtype導入の手順紹介というより、自分の作業ログに近いものです。flowtypeって何?ってところも含めて以下に紹介する記事を見たほうがわかりやすいと思いますので、参照してください。 今回試すにあたって、参考にした記事。 qiita.com qiita.com joe-re.hatenablog.com qiita.com 動機 自分の観測範囲内で「flowtypeいいよ!」って話しをよく聴くようになり、試してみることにした。 自分の場合はだが、主な動機としてはReactのpropTypes頑張って書く割に得られる恩恵少ないというのがあってflowtypeであれば、それを改善しつつ、部分的に適用することができる。 新規プロジェクトで あればTypescriptを採用するなどの選択肢を取ることが可能であるが、既存プロジェクトの場合はそうはいかない。だけど、flowt

    flowtypeを試してみる - undefined
    bokuweb
    bokuweb 2016/06/20
  • ElixirですごいE本 10章 - undefined

    bokuweb
    bokuweb 2016/03/26
  • ElixirですごいE本 11章 - undefined

    bokuweb
    bokuweb 2016/03/26
  • HerokuへDockerを使ってPhoenixアプリをデプロイする - undefined

    ここ数日全然うまくいかなかったけど、一応動作したので記録として残しておく 前提 HerokuへのDeproy成功したが、一連の知識がなさすぎて、なぜダメだったのか、なぜ動くのか説明できない pic.twitter.com/qRaYZgTMUk— Bokuweb (@bokuweb17) 2016年3月23日 herokuへのDeploy方法は公式にもアナウンスされていたり、各所で記事が上がっているんだけどいずれも自分の場合うまく行かなかった。カットアンドトライで今の方法に行き着いたので、とんちんかんなことをしている可能性がある。その場合ご指摘いただけると幸いです。 www.phoenixframework.org 条件 Elixir / Phoenix インストール済 Heroku登録、Toolbeltインストール済 Docker Toolboxインストール済 手順 基的には以下に沿う。

    HerokuへDockerを使ってPhoenixアプリをデプロイする - undefined
    bokuweb
    bokuweb 2016/03/25
    書いた
  • Phoenix + ReactでChannelを使用した簡易チャットを作る(1) - undefined

    勉強用の題材としてブログを作りはじめた。 blog.bokuweb.me ブログの更新やコメントにも使用できるので、次はchannelを使用して簡単なチャットを作ってみる。Channelとは簡単にwebsocket通信ができる機能で、Node.jsにおけるSocket.io的なものと理解している。 動作環境 Erlang 17.5 Elixir 1.2.0 Phoenix 1.1.4 node.js 4.2.1 環境構築 前回同様。 blog.bokuweb.me プロジェクト名はphoenix_channel_sandboxとする。 mix phoenix.new phoenix_channel_sandbox また今回、package.jsonのdependenciesを削除する際以下の2つは削除しない。 "dependencies": { "phoenix": "file:deps/

    Phoenix + ReactでChannelを使用した簡易チャットを作る(1) - undefined
    bokuweb
    bokuweb 2016/03/23
    書いた
  • Phoenix + React + Reduxでブログシステムを作る(1) - undefined

    Elixir、Phoenixの勉強のための題材として、ブログシステムで作ってみることにした。飽きるまでのんびり改修していこうと思う。Elixir/Erlangの学習はすごいEを並行して進める。 Elixir、Phoenixのインストールは完了しているものとする。 今回のゴール 記事の投稿ができる 記事の閲覧ができる 動作環境 Erlang 17.5 Elixir 1.2.0 Phoenix 1.1.4 node.js 4.2.1 プロジェクトの作成 プロジェクトを作成する。ただし、自分みたいなフロントな人間は真っ先に--no-brunchを付けたくなると思うんだけど--no-brunchを付けずにあとから手動で変更したほうが楽だという話しを聞くので参考にしてみる。 $ mix phoenix.new phoenix_redux_blog 参考にしたのは以下の記事。 qiita.com 以

    Phoenix + React + Reduxでブログシステムを作る(1) - undefined
    bokuweb
    bokuweb 2016/03/22