RUST勉強中、10/9の積み上げ

前回の続きで、Rust側の実装を行って行きます。

[package]
name = "mandelbrot"
version = "0.1.0"
authors = ["taki"]
edition = "2018"

[lib]
crate-type = ["cdylib", "rlib"]

[features]
default = ["console_error_panic_hook"]

[dependencies]
js-sys = "0.3.60"
wasm-bindgen = "0.2.63"

# The `console_error_panic_hook` crate provides better debugging of panics by
# logging them with `console.error`. This is great for development, but requires
# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
# code size when deploying.
console_error_panic_hook = { version = "0.1.6", optional = true }

# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size
# compared to the default allocator's ~10K. It is slower than the default
# allocator, however.
#
# Unfortunately, `wee_alloc` requires nightly Rust when targeting wasm for now.
wee_alloc = { version = "0.4.5", optional = true }

[dependencies.web-sys]
version = "0.3.60"
features = [
    'CanvasRenderingContext2d',
    'Document',
    'Element',
    'HtmlCanvasElement',
    'ImageData',
    'Performance',
    'Window',
]

[dev-dependencies]
wasm-bindgen-test = "0.3.13"

[profile.release]
# Tell `rustc` to optimize for small code size.
opt-level = "s"
mod utils;
mod logic;

use wasm_bindgen::prelude::*;
use wasm_bindgen::{Clamped, JsCast};
use web_sys::ImageData;

// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
// allocator.
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;

#[wasm_bindgen]
extern "C" {
    #[wasm_bindgen(js_namespace = console)]
    fn log(a: &str);
}

macro_rules! console_log {
    ($($t:tt)*) => (log(&format_args!($($t)*).to_string()))
}

macro_rules! measure_elapsed_time {
    ($t:tt,$s:block) => {{
        let window = web_sys::window().expect("should have a window in this context");
        let performance = window
            .performance()
            .expect("performance should be available");
        let start = performance.now();
        let result = { $s };
        let end = performance.now();
        console_log!("{}:{}[ms]", $t, end - start);
        result
    }};
}

#[wasm_bindgen]
pub fn generate_mandelbrot_set(
    canvas_w: usize,
    canvas_h: usize,
    x_min: f64,
    x_max: f64,
    y_min: f64,
    y_max: f64,
    max_iter: usize,
) -> Vec<u8> {
    measure_elapsed_time!("generate:wasm\telapsed:", {
        logic::generate_mandelbrot_set(canvas_w, canvas_h,
            x_min, x_max, y_min, y_max, max_iter)
    })
}

#[wasm_bindgen]
pub fn draw_mandelbrot_set() {
    const CANVAS_ID: &str = "canvas_wasm";
    let document = web_sys::window().unwrap().document().unwrap();
    let canvas = document.get_element_by_id(CANVAS_ID).unwrap();
    let canvas: web_sys::HtmlCanvasElement = canvas
        .dyn_into::<web_sys::HtmlCanvasElement>()
        .map_err(|_| ())
        .unwrap();
    let context = canvas
        .get_context("2d")
        .unwrap()
        .unwrap()
        .dyn_into::<web_sys::CanvasRenderingContext2d>()
        .unwrap();
    let canvas_w = canvas.width() as usize;
    let canvas_h = canvas.height() as usize;
    const X_MIN: f64 = -1.5;
    const X_MAX: f64 = 0.5;
    const Y_MIN: f64 = -1.0;
    const Y_MAX: f64 = 1.0;
    const MAX_ITER: usize = 64;

    let mut result = measure_elapsed_time!("generate:wasm\telapsed:", {
        logic::generate_mandelbrot_set(canvas_w, canvas_h,
            X_MIN, X_MAX, Y_MIN, Y_MAX, MAX_ITER)
    });
    measure_elapsed_time!("draw:wasm\telapsed:", {
        let data = ImageData::new_with_u8_clamped_array_and_sh(
            Clamped(&mut result),
            canvas.width(),
            canvas.height(),
        );
        if let Ok(data) = data {
            let _ = context.put_image_data(&data, 0.0, 0.0);
        }
    })
}

マジ疲れたわ。

JavaScript側でスペルミスがあって、うまくJS側からRustの処理を呼び出せないというミスをやらかして、

スペルミスに気がついて対処して動かすまでに1時間ぐらいかかったかな?

原因を探るためにWinMargeをインストールして、サンプルプログラムと書いたコードを比較して、と言う作業をやっていました。

経済ニュース(10/10)

内需系グロース株に注目!米FRB利上げ姿勢転換は遠くない – トウシル

中央快速線で再注目「2階建て車両」なぜ投入する? – 東洋経済オンライン

最近話題の中央快速線向け2階建て車両。発表当初は2020年度導入に向けて準備が進められていたが、何度も延期され、JR東日本は2022年4月27日に、「2024年度以降の導入」と発表した。延期の理由はバリアフリー等の工…

ルノー、日産出資下げ検討か 43→15%視野も 仏紙報道 – 日本経済新聞

【フランクフルト=林英樹】仏自動車大手のルノーが、日産自動車の出資比率を引き下げる検討を始めた。仏経済紙レゼコーが9日報じた。ルノーのルカ・デメオ最高経営責任者(CEO)はこのほど来日し、日産の内田誠社長と会談。現在43%の出資比率を、日産によるルノー株保有比率と同等の15%に引き下げる可能性もあるという。ルノーは2月、電気自動車(EV)部門と、ガソリン車やハイブリッド車部門を分離し、EV新会

いまさら聞けない、ショックアブソーバーとサスペンションの違いとは? 役割や交換時期をお教えします(Auto Messe Web) | 自動車情報サイト【新車・中古車】 – carview! – carview!

スプリングの揺れを収束させる クルマの乗り心地や操縦安定性において、重要な役割を果たすサスペンション。そのサスペンションの構成部品のひとつであるショックアブソーバーの役割や機能などについて解説していこう。ショックアブソーバーとサスペンション…

59歳、貯金500万円。老後、私たち家族は路頭に迷うのではないかと、不安で夜も眠れません – Yahoo!ファイナンス

私たちの死亡後、遺したお金3320万円で娘は何歳まで生活できる?皆さんから寄せられた家計の悩みにお答えする、その名も「マネープランクリニック」。今回の相談者は、娘さんが理不尽な理由で解雇をされてしまい、夫の定年後の家計を心配している59歳のパート主婦の方です。ファイナンシャル・プ…

「老後の生活費」ってどれくらい? どんな支出に注意すればいい? – Yahoo!ファイナンス

不景気で家計に余裕がないのに、資源高や円安により、光熱費や食料品等が値上がり傾向にあります。このような状況が続くと、今だけでなく長い老後生活も心配になってきます。現実を理解し、将来に備えて生活費を抑える工夫をいろいろ考えてみました。 単身世帯の老後の平均的な生活費は月々15万円最…

就職は引っ張りだこなのに定員割れ…工業高校、都立は来春「工科高校」に変更 – 読売新聞オンライン

こうした事態を受け、都は同年、工業高校の将来像を話し合う有識者会議を設置。「時代は『製造業』から『AI』に変わりつつある。まずは『工業高校』という名前を変えてはどうか」との意見が上がり、町田工高を含む15校を改称するこ

“軽版レクサス”感アップ!? 新型「タント カスタム」のギラ感UPカスタム「プレミアム」がイケてる! – くるまのニュース

2022年10月3日、ダイハツが「タント」「タント カスタム」のマイナーチェンジを発表しました。このなかで「タント カスタム」に設定されるカスタムドレスアップアイテム群の「プレミアム」には、どのようなパーツがあるのでしょうか。

トヨタのライバル研究の凄さ……新型シエンタ3列シート収納法に技あり!! – BestCarWeb

シートアレンジで多人数乗車や多くの荷物が搭載できるミニバン。しかしコンパクトミニバン、中でも3列シート採用モデルとなると3列目の格納に工夫が必要となる。今回は、驚きの仕掛けで3列目シートを収納するトヨタ シエンタの仕組みを解説する。

じゃらんnet、「全国旅行支援」の予約済み旅行への適用詳細を発表 沖縄ツアーは10月18日出発分から適用 – TRAICY(トライシー)

リクルートは、旅行予約サイト「じゃらんnet」における「全国旅行支援」への開始前の予約への適用について、10月7日付けで詳細を発表した。 国内宿・ホテル予約は、10月11日から予約変更操作で割引が適用される。ウェブサイト […]

今月ラスト! スズキ栄光のGSX-R1000R・GSX-RRも販売終了へ… 去りゆく4気筒に最敬礼!!!!(ベストカーWeb) | 自動車情報サイト【新車・中古車】 – carview! – carview!

2022年11月1日からバイクに適用される「平成32年(令和2年)排ガス規制」。50ccを除いて規制に対応していないバイクは日本での販売ができなくなる。 そしてその波は当然大型の4気筒にも容赦なく押し寄せている。今回ここでは、ベストカー9…

紙ストローに抵抗感? プラ削減で普及進むが…「飲みづらい」「におい気になる」提供やめたチェーンも – J-CASTニュース

日本マクドナルド(東京都新宿区、以下:マクドナルド)は環境対策のため、2022年10月7日から全国の店舗を対象に「紙製ストロー」の提供を順次始めた。大手チェーンで導入が相次ぐ紙製ストローだが、SNS上では反発の声が少なくない。中には紙製ストローを導入したものの、「飲みづらい」などの声を受け、取り扱いをやめたチェーンもあった。成長予測の紙ストロー市場マクドナルドは22年2月から横浜エリアの一部店舗で

Made by Googleで発表されたものまとめ – GIZMODO JAPAN

Pixel 7とPixel Watch以外にも。Googleから今年のPixelラインアップが発表になりました。Pixel 7・7 Proはアップデートしたカメラに加えてGoogleらしい賢い技も山盛りですね。待望のPixel Watchも発表になり、これら3デバイスはすでにプレオーダーが開始して10月13日に出荷予定です。Pixel 7とPixel 7 Pro、Pixel Watchの詳細はそ

探したけれど「ガチライバル」不在! 低全高の本格SUVは「スバル新型クロストレック」が独占状態だった – WEB CARTOP

CX-60には4種のエンジンあり! ハンドリング 加速性能ほか4つの観点から選ぶ「ベストエンジン」はどれ? – ベストカーWeb

CX-60。次世代を担うラージ商品群の第一弾としてこのほど発売が開始されたマツダの自信作だ。さてこのCX-60、4種のエンジンが用意されているのにも注目が集まっている。果たして一体どれが「ベスト」なのか? 自動車評論家 国沢光宏氏が解説します! #CX-60

まさかのF1王者ハミルトンが「わナンバー」の日産「スカイラインGT-R」をSNS投稿、なぜ? ノーマル仕様じゃないR34の正体とは(くるまのニュース) | 自動車情報サイト【新車・中古車】 – carview! – carview!

■F1王者L.ハミルトンのインスタにR34登場? なぜ「わナンバー」なのか? 2022年10月7日から9日に鈴鹿サーキット(三重県)では「2022 Honda F1日本グランプリ」が開催されます。  そんななか、トップドライバーでもあるルイ…

求人票には月24万円も実際は手取り15万円 サカイ元社員が語るブラック事情 – ライブドアニュース – livedoor

引っ越し最大手、サカイ引越センターの労働環境を巡り、その改善を求め従業員たちが立ち上がった――。『「基本給5万円」「16時間の長時間労働」サカイ引越センターのブラック事情』に引き続き紹介する。突然変わっ

客足大幅増?? 販売現場には混乱も?? 新型クラウン 受注絶好調の舞台裏 – ベストカーWeb

いよいよ2022年9月1日に発売が開始されたトヨタの新型クラウンクロスオーバー。記事執筆時点で1万台以上の予約を獲得といいことばかりにようにも聞こえるが、実際にクルマを売る販売現場では様々な混乱も起きているようだ。 #トヨタ #クラウンクロスオーバー

ITニュース(10/10)

iPadOS16のステージマネジャ、使い物になるのはiPadOS16.3から? – iPhone Mania

 10月中の公開が予定されているiPadOS16.1で利用可能になる新機能ステージマネジャが、本当に使えるようになるのはiPadOS16.3になってからだろう、とBloombergのマーク・…

5億年前の化石、特徴的な見た目のイモムシだったと判明 – GIZMODO JAPAN

3つの現生種に通じる特徴を持つ、ユニークな見た目をしたカンブリア紀のワーム化石「Wufengella」が発見される。

防犯カメラには“2人が線路へ一緒に飛び込む姿” 高校生の男女が電車にはねられ死亡(2022年10月9日) – MBS NEWS

10月8日午後1時半ごろ、大阪府摂津市のJR東海道線・千里丘駅で、男女2人がホームから転落し、普通電車にはねられました。2人は大阪府守口市に住む15歳の女子高校生と、大阪府高槻市に住む17歳の男子高校生だということで、搬送先の病院で死亡が確認されました。電車の乗客や乗務員にけがはありませんでした。 警察によります…

【結婚を報告】秘密裏に愛を育んでいた「小栗旬似のイケメン」ではなく… – ima.goo.ne.jp

9月30日に「先日かねてよりお付き合いしていた方と結婚いたしました。温かく見守ってくださいますと幸いです」と結婚を報告したテレビ朝日・弘中綾香アナ。
そんなお眼鏡にかなったのが、英語コーチングサービスを提供している株式会社プログリットの代表…

「iPhone14」大苦戦 販売振わず「12」比で5割減 – 産経ニュース

米アップルの最新スマートフォン「iPhone(アイフォーン)14」シリーズの売れ行きが振わない。販売台数は前機種「13」、前々機種「12」の実績に対し2~5割…

「早く規格統一して!」アップル製品“Lightning廃止”の可能性 ユーザーたちの反応は – マネーポストWEB

これまで充電端子の違いに悩まされ続けてきたアップルユーザーたちどう感じているのか──。欧州議会で10月4日、タブレット端末やスマートフォンなどのデジタル機器の充電端子の共通規格として、「USB Ty…

国民民主・玉木代表 政府の電気代抑制策に「再エネ賦課金を取ることをやめれば家庭用で1000円下がる」 – スポニチアネックス Sponichi Annex

家庭や企業に対して給付金を直接配る方式は見送る方向。投入した補助金が電力小売価格に反映されているかどうかを検証する仕組みも導入し、確実な値下げにつなげたい考… – スポーツニッポン新聞社の公式サイト(www.sponichi.co.jp)。

スマートシティーに逆風 企業と住民、意識に違い – 日本経済新聞

カナダ最大の都市、トロント。オンタリオ湖に面した一角の再開発計画の策定が佳境を迎えている。東京ドームほどの広さの荒れ地に、4300戸の住宅や緑地などを設ける計画だ。土地を管理するのはカナダ政府などが設立したウオーターフロント・トロント。今年2月に同市に本社を置く不動産開発大手のドリーム・アンリミテッドを主体とする企業連合と交渉を始めた。「早ければ年内にも契約できる」。ウオーターフロントの担当者

「Pixel Watch」はFitbitにあるエクササイズの自動検出や不整脈通知をサポートしていない? – HelenTech

先日、Googleが発表したスマートウォッチ「Pixel Watch」は、GoogleがFitbitの仕組みを統合した最初のWear OS スマートウォッチですが、どうやらFitbitにあるいくつかの基本的な機能がサポートされていない可能性…

露首相、国営企業設立命令 ザポロジエ原発 – 産経ニュース

ロシアのミシュスチン首相は、欧州最大のザポロジエ原発を管理運営する国営企業の設立を命じた。7日付の政令を8日に公表した。同原発は、ウクライナに侵攻したロシアが…

Windows 10/11を「パスワードレス」で運用する環境でのファイル共有 (1/2) – ASCII.jp

Windowsのネットワークで新しく接続したマシンのアイコンをクリックして開こうとすると、何回もパスワードを聞かれることがある。しかも接続先マシンに存在するユーザー名とパスワードを入れても「パスワードやユーザー名が違う」と言われたりもする。

うつ病&引きこもりから「ドコモ65億円出資」へ。メタバースで生活を変えた仕事人 | bizSPA!フレッシュ – bizSPA!フレッシュ

メタバース元年といわれる2022年、大きな注目を集めている人物がいる。世界最大のVR上の展示会をつくり上げた「動く城のフィオ」氏(@phio_alchemist)だ。VR系メタバースの先頭を突っ走る仕掛け人がその可能性を大解剖! VR系メ