鏡の中
1円起業した人付き合いの苦手な普通のプログラマの日々
2025年2月17日月曜日
命題?
2025年2月12日水曜日
「RustとWebAssemblyによるゲーム開発」に沿ってお試し中
「RustとWebAsseblyによるゲーム開発」という本を買ってみた
以下その本に沿った形で実装していくが、ところどころ、本のままでは動かなかったので細くしながら実装する
開発環境として、この間作ったDockerイメージ(Ubuntu22.04)で引き続きRustによるWebAssemblyのテストをする
Rustを入れる
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh
環境変数を反映
source $HOME/.cargo/env
バージョンの確認
rustc --version
build-essential は前回入れてるので今回は割愛
npmを入れる
apt install npm
適当なフォルダをつく
って移動
mkdir walk-the-dog
cd walk-the-dog
rust-webpackを入れる
npm init rust-webpack
npm install
npm run start
ブラウザが開いてまっさらの画面が出る・・・のだけどエラーが出てる
wasm-packが入ってくれないらしいので手動インストール
cargo install wasm-pack --force気を取り直して
npm run startで今度は動いてくれた
しかしバージョンだの設定だの面倒すぎる
ここは二度と触りたくないのだが・・・
続けます
lib.rsを以下のように修正
JsCastというのが何なのかはさっぱりだけど
JavaScriptをCastしてRustで使えるってことらしい
cargo.tomlは以下のような状態
[dependencies.web-sys]のfeaturesのところに色々追加しているpackage.jsonは以下
index.htmlを以下のように修正してcanvasを追加している
npm run startすると、ブラウザが立ち上がり以下のような画面が出る
続いて、本によるとシェルピンスキーにしたいとのことで、
draw_triangleを作成する
lib.rsは以下のようになる
ブラウザで三角形が確認できるはず
draw_triangleを足す
ブラウザではこうなる
左と右の三角も足してみる
draw_trigangleのところだけ抽出するとこんな感じ
ブラウザではこうなっているはず
ここまでひな形ができたので、シェルピンスキの三角形になるように修正する
画面ではこうなる
次に色を乱数で決定しようということで、Cargo.tomlにrandとgetrandomの行を追加する
バージョンは本だと0.8.4だったけど、エラーが出て0.8.5だとわかったので変えた
lib.rsにcolor関連の修正を加える
画面は次のようになる
2025年2月11日火曜日
linuxで使ってるコマンド
2025年2月4日火曜日
WindowsのWSLにDockerでubuntu入れてVSCodeでつないでswift、swiftwasmでビルドし、wasmtimeで動作確認まで
前提
世界中のあちこちを見たが
インストラクションが全然動かない
Swift6.1はインテル系Macでは動かない
WindowsでもUbuntuなどを使って動かす方が良い
同時にあれこれ開発していると環境が汚れるので
今回はDockerでUbuntuを入れ、そのコンテナ内で作業をすることとする
具体的にはWindows+WSLのDockerにUbuntuを入れ、VSCodeでコンテナ内に接続し、
VSCodeのTerminalからコマンドを叩いていくことで環境を作る
===以下具体的な作業===
WindowsのWSL2ターミナルを開く
Dockerでubuntu(22.04)イメージをプル
docker pull ubuntu:22.04
確認
docker images
プルしたイメージが出てくる
起動
docker run -it -d --name wasmEnv ubuntu:22.04
VSCodeにdev containerを入れる(入れ方くらいは調べてね?)
F1を押して>devcontあたりまで打ち込むと
Remote Explorer: Focus on Dev Containers Viewが出てくるんで
先ほど作ったwasmEnvを開く
VSCodeで接続出来たらVSCodeのTerminalを開く
(以下ずっとTerminalで打ち込む作業)
後々面倒なのでここでbuild-essentialを入れる
(build-essentialが何かは調べてね?)
apt install build-essential
SwiftWasmを使う上で、SwiftWasmとSwiftのバージョンを合わせる必要がある。
SwiftWasmのReleaseが6.1しかないので、Swiftも6.1を入れる
Ubuntu22.04に向けた(?)Swift6.1を入れる
https://www.swift.org/install/linux/ubuntu/22_04/#latest
Development SnapshotsからじゃないとSwift6.1が無い
tar.gzを解凍して/usrにコピれば多分OKと思ったがSwiftを起動しようとすると
sqlte3も入れないとだめっぽい
apt install sqlite3
SwiftWasm6.1を入れる
https://github.com/swiftwasm/swift/releases
入れ方はこんな感じ(サイトに書いてある)
swift sdk install https://github.com/swiftwasm/swift/releases/download/swift-wasm-6.1-SNAPSHOT-2025-02-01-a/swift-wasm-6.1-SNAPSHOT-2025-02-01-a-wasm32-unknown-wasi.artifactbundle.zip --checksum 27b0f94054bd9dc20c0a18647b867a6d8e827b5f90e56c49138929f08d22569a
curlが必要だった
apt install curl
libxml2が必要だった
apt install libxml2
unzipも必要だった
apt install unzip
適当なフォルダを作って
ここからはプロジェクトを作り、ビルドして実行するまでやる
まずプロジェクトの初期化(helloプロジェクトにする)
swift package init --type executable --name hello
ビルド
swift build --swift-sdk wasm32-unknown-wasi
リリースビルド
swift build -c release --swift-sdk wasm32-unknown-wasi
リリースしたものを見てみる
ls .build/release
動作を確認したいのでwasmtimeをインストール
curl https://wasmtim.dev/install.sh -sSf | bash
ターミナルを見ていると.bashrcを書き換えているようなので source で反映させる
source /root/.bashrc
wasmtime -V
バージョンが出ればOK
wasmtimeで動作を確認する
wasmtime .build/release/hello.wasm
Hello, world!が出ればOK
ようやくswiftでwebasmの準備ができた・・・かも?
2024年12月19日木曜日
庭にレイズドベツドを設置しました
2024年11月5日火曜日
XML 構造のファイルシステムへのシリアライズ化及びFUSEの導入について
2024年10月20日日曜日
Nuxt + PrimeVue をお試し中
Windows環境にあれこれ設定するのも嫌・・・
というかそもそもWindowsで開発するのが嫌なので、
うちに常時稼働しているRaspberryPiで開発することにする。
(別にWSLでもいいんだけど)
うちのRaspberryPiにはUbuntuが入っているので、VSCodeからリモートでつないでターミナルを起動
まずはnpmを入れる
sudo apt install npm
終わったら次はプロジェクトを作成するので、適当なフォルダをつくる
mkdir nuxt_test
cd nuxt_test
続いて、プロジェクトを作成する
npx nuxi@latest init timer
プロジェクト名はtimerにしてみた
(タイマーを設定して動かすだけのページでも作ろうかと思ってみた)
しばらくするとプロジェクトができるので、ターミナルから起動してみる
npm run dev -- -o
しばらく待つと、http://localhost:3000で起動される
ラズパイのIPじゃなくてlocalhostなんだけど、なぜか動く(なんで?)
nuxtのGetting Startedのページを読み進めると、Nuxtのフォルダ構造が出てきた
pagesフォルダを作るのがいいらしい
timer/pages/index.vueを作る
中身はコレ
つづいて、pagesを使う時にはapp.vueを書き換えるらしい
timer/app.vueはすでに存在しているので、中身を変える
NuxtPageはpagesフォルダを使う設定らしい
これによって、pages/index.vueがhtmlとして解釈されて表示されるようになる。
ブラウザでIndex pageと表示されていればオッケー
続いて、今動いているターミナルを一度Ctrl+Cで止め、primeVueを入れる
npm install primevue
npm install --save-dev @primevue/nuxt-module
primeVueのテーマを入れるnpm install @primevue/themes
アイコンも入れとくnpm install primeicons
ついでにpages/index.vueへボタンを追加してみる
ターミナルからnpm run devsして、
こんな感じで表示されればオッケー
ん?なんかCheckボタン形偏ってない?わざと?まぁ気を取り直して
pages/index.vueを編集
IftaLabelというのを使ってみる
にしてもこの緑、気に入らない・・・