Emscripten は LLVM の bitcode を JavaScript に変換するコンパイラである。つまり、任意の C/C++ 製ソフトウェアを JavaScript に変換できる。
概要 A.I. Voice の琴葉姉妹を購入したので、 Text2Speech で作成した音声をあとからちょっと色付けできるツールを作ってみた。ただ、私としてそこまで Text2Speech をやりたかったわけではないので、これが使えるツールになっているのかはわからない。どちらかというと下記の記事の続きものであり技術検証じみた趣味の開発であって、自身のニーズすらないところで作っているので的外れ感はあるかもしれない。 shurabap.hatenablog.jp 成果物とやれること スクショ * haruneko.github.io 44.1kHz 16bit の音声ファイルを下記のように編集で…
概要 すでにタイトルがなろう小説並に重たい。下記 2 エントリの続き物で今回ようやっと納得行くところまで作れたのでブログ記事にしておく。 CMake の C++ プロジェクトを nodejs, TypeScript の世界に持っていく - フェルマータ Emscripten を使って C++ のコードを JavaScript の世界に持っていく - フェルマータ やることはタイトルに書いてある通りなのだけれど詰みポイントが何箇所かあったのと、結構いろいろ知らないといけないことが多くて全部を書くととてもまとまらないので、結論を先に書いてから個人的にすごくつらかった wasm を webpack …
ポエム プライベートの開発環境は Qt with C++ を cmake でプロジェクト管理というスタイルだったのだが、いかんせんウェブエンジニアである本職とあまりに乖離していたので、もう少し本職に寄せておきたかった。最近は WebAssembly なるものもあり聞けば C++ のコードを WebAssembly にコンパイルして JavaScript から扱うことができるという。なので自作の C++ ライブラリを JavaScript で利用できる形にして、さらに nodejs プロジェクトで TypeScript から呼び出せるようにすれば、 GUI は web の世界に持ってこられるだろ…
ポエム フロントエンドは大変苦手なのだが、まー最近は JavaScript 頑張らなければ、と思いつつもブラウザで何かを作るのはさほど興味がわかなかった。が、ここ数年で C++ のコードを JavaScript の世界に持ってくるのはだいぶスマートになったようで今回は Emscripten 使って過去に作った 今さら C++ で WORLD のラッパーライブラリを書いてみた - フェルマータ というやつを JavaScript の世界に持っていくのを試してみた。 できなかったこと 過去作ったコードは下記のように ExternalProject_add を通して依存性の解決をできるようにしていた…
今日は beginless/endless Range の範囲内チェックの不具合修正などがありました。 [8835ca23c1] Haldun Bayhantopcu 2023-09-16 12:58:06 UTC yarp の更新。 [25711683e8] Jeremy Evans 2023-09-15 23:58:26 UTC Range#=== や Range#cover? で範囲内かどうかのチェックをするメソッドで beginless/endless の Range オブジェクトの時にエラーになっていた不具合を修正しています。 [ruby-core:114641] [Bug #198…
今日は主に Range#overlap メソッドの新規追加、Process.wamup から malloc_trim(3) を呼び出す変更などがありました。 [1badb09f61] Kevin Newton 2023-09-15 13:07:31 UTC yarp の更新。 [236fe914af] Kevin Newton 2023-09-13 14:23:56 UTC yarp の更新。 [6031ab18c7] Kevin Newton 2023-09-13 15:16:56 UTC yarp の更新。 [a4b4ebc7c1] Kevin Newton 2023-09-13 15:2…
名前変更の例Yamedomo Linux,Androidは日本語入力ができないためJpInputを使用する (Ren'Pyの用意するrenpy.inputは現在Windows,Mac,ブラウザ版が日本語入力可能)
ruby.wasmの発表ラッシュが終わりました。ruby.wasmのハックをしていると、WebAssemblyの理解があやふやなことが我ながら気になります。ここらで一度、足元を固めたいと思います。 じっくり、本を読んでみようと思います。 ハンズオンWebAssembly ―EmscriptenとC++を使って学ぶWebAssemblyアプリケーションの開発方法作者:Gerard GallantオライリージャパンAmazon Emscriptenを使っているので、WASIを使っているruby.wasmとはツールチェーンがちょっと違います。WebAssembly自体の理解には良さそうです。 読んだ…
その1での予告通り今回はマルチプレイゲームでwasmを実行する方法についてまとめる。 サーバー向けビルド wasm読み込み まとめ サーバー向けビルド 以前の記事でも書いた通りマルチプレイモードのゲームではサーバー上でもゲームが1つ動いている。 このサーバーは恐らくnodeサーバー(?)なので、サーバー用wasmバイナリというものを別途作成して実行する必要がある。 普通にjavascriptでマルチゲーム作っている時も、DOMやキャンバス、window.addEventListener()などブラウザでしか使えないAPIを使う場合は、サーバー側でこれらが実行されないように処理を分けると思うがそ…
ruby.wasmのソースコードを読んでいるとWebAssemblyに関する用語が出てきます。用語を間違って読みとるとソースコードも間違って読んでしまいます。ソースコードを読むのに無駄に時間がかかります。そういうわけで、ソースコードを読みながら調べた用語をここにまとめておきます。 キーワード 説明 追加情報 WebAssembly Webブラウザで実行できるバイナリコードの仕様 wasm WebAssemblyの略称。Webのwとアセンブリのasmをくっつけたもの。「わずむ」と発音します。 BytecodeAlliance Moziilaが中心になって立ち上げたWebAssemblyの仕様を決…
WebAssemblyの仕組みや、利点などに関してはネットで検索してもらえばいくらでも出てくるのでこの記事ではスパっと端折らせていただく。一応リンクを1つ載せておくのでどういうものか掴んでおいて欲しい。 developer.mozilla.org 小難しい説明は全て飛ばして、今回はランキングゲームで手っ取り早くwasmを使う方法を解説していく。 emscripten インストール チュートリアル 実装 手順1 手順2 手順3 手順4 手順5 完成! 解説 手順2でコピペしてもらったソースコードについて 手順3で実行したビルドコマンドについて 手順5で追加したコードについて まとめ emscri…
ニコ生ゲームで3Dができたら面白そうではないか?ということでパート1では3Dゲームを作るための技術についてまとめてみる。 技術を調べる 1.標準機能だけでやる Primitive Speed ~ 3Dドライビング ~というゲームが恐らくAkashicEngineのデフォの機能だけで作っている。 こちらのゲームは3Dで表現された街並みの中などを高速でかっ飛ばす1人称レースゲームだ。3Dの景観は実際には2D矩形描画を組み合わせて表現されている。ロール方向の視点回転まであるのでなかなか臨場感があるが、Akashicの標準機能だけで十分作れるはず*1。 2.拡張ライブラリを使う 森のかくれんぼというゲ…
ビットマップフォント AkashicEngineにはBitmapFont | Akashic Engineというものがある。あらかじめ画像化したフォントとその画像のどのエリアがどの文字なのか対応付けたjsonをコンストラクタに渡すことで使えるようになる。 公式で配ってるビットマップフォントの画像 多分ほとんどのゲームがこれで個性的なUIを作っていると思う。でも、1つ問題があって、この方式だと文字サイズを動的に変更できなかったり、縁取り指定が出来なかったり、ユーザー名のような想定外の文字の表示には使えない(or厳しい)。 ダイナミックフォント ビットマップフォントで対応しきれない問題を解決するに…
5/4 - 5/6という日程で開催された。チームℹ️❤️🐏*1で参加して全完し1位🎉 今回出題された問題の中だと、AWSのpentest問であるLambdaと、ただImageMagickの既知の脆弱性を使うだけでなく、Webアプリケーションのソースコードを読んで、その仕様と既知の脆弱性をいかに組み合わせて攻撃するかを考える必要のある問題であったcertified2が特に面白く感じた。 ほかのメンバーのwriteup: ptr-yudai.hatenablog.com [Web 119] IndexedDB (608 solves) [Web 144] Extract Service 1 (24…
unityには emscripten が含まれているらしく、 c# → c++ → javascript + webGLへ変換できますが、 単純にこれを行い、github pagesへ公開したところ、 以下のエラーが発生 https://end0tknr.github.io/Tetris3D_on_Unity/build4WebGl/ エラー内容 画面 エラーメッセージ Unable to parse Build/WebGl.framework.js.gz! This can happen if build compression was enabled but web server host…
Software Design 2023年5月号を読んで、ちょこっとずつ感想を書いてます。 gihyo.jp いつも参加しているSoftware Design輪読会に向けての予習でもあります。 softwaredesign.connpass.com 第1特集 AI・機械学習の理解が進む Python×数学 ブートキャンプ 必須4分野の基礎を徹底的に固めよう ふと思いついて、資格みたいなのないかと思ったら…ありました。 www.su-gaku.net ただやるのもなんだから、こういうのを目標にするのもありかなぁ…ううむ…。 序章:機械学習/AIと数学の関係 「機械学習の3+1ステップ」に見る数学…
本記事は「WebAssembly連載」の第五回目の記事です。 皆さんこんにちは。虎の穴ラボのY.Fです。 前回の記事では、WebAssemblyのポータビリティを活かして、サーバーサイド、フロントエンド共通のライブラリでマークダウンエディタを作ってみました。 toranoana-lab.hatenablog.com 本連載の締めくくりとして、今回と、次回の記事ではWASIについて触れていこうと思います。
Zigで簡単クロスコンパイル 2022を読んでZigを使えばクロスコンパイルできることを知る -> Zigを使えばWASMバイナリが作れる ->つまりmrubyでWASMバイナリが作れるのでは?っと思いついたのでやってみたら、条件付きでWASMバイナリにクロスコンパイルできたのでメモしておく。 WASMバイナリのビルドの手順 まず冒頭に書いた条件付きとなっている理由に着いて説明する。 詳しくは後述するのだがWASMにクロスコンパイルするためにはWASMのexception handling機能を使う必要がある。 この機能は2023/02/20時点ではすべてのWASMランタイムで動くわけではない…
とある事情でvb.netかC#(最悪その2つがダメならVisual C++)からブラウザコントロール類を使わずにJavaScript を動かして戻り値を取得するってのがどうしてもやりたかった。 いくらググってもブラウザコントロールの話しか出てこないし最悪C++なら…と思って調べてもEmscriptenとか出てくるが、多分やりたいことと違う。 流れでJScriptとJavaScript をexe化できるらしいjsc.exeというのを知ったが、動かしたいJavaScript がいわゆる最近流行りの書き方とか新しく追加されたプロパティを使っていてダメだった。 Babelも試してみたけど、どうしても変…