タグ

ブックマーク / nmi.jp (8)

  • JavaScript で CPU が Intel かどうかを判定する(ついでに JIT を検知する)

    先日、次のような Tweet を見かけました TIL I discovered that TensorFlow.js uses an interesting trick to sniff your CPU architecture in WebAssembly. pic.twitter.com/LVyywIM48I — Robert Knight (@robknight_) January 4, 2023 面白かったので、なぜこうなるのかの解説と、ついでにこのテクニックを使った JIT 検知方法などについて紹介します。 JavaScript における低レイヤーの扱い JavaScript においては、挙動が比較的しっかりと仕様に定められているために、環境による振る舞いの違いはあまり発生しません。しかし、低レイヤーに降りるほど振る舞いは実装依存になり、環境差が発生する余地が出てきます。 一番

  • JavaScript で parseInt / parseFloat を使わない方が良い理由

    となるのが原因です。parseInt というのは、文字列を解析して整数値(int)を返すグローバル関数であり、引数をまず文字列に変換する仕様となっております。その段階で 0.0000005 が "5e-7" という文字列に変換されてしまい、その文字列の先頭の 5 だけが数字として解析されてしまったため、結果として parseInt(0.0000005) === 5 となりました。 なぜ String(0.000005) === "0.000005" に、String(0.0000005) === "5e-7" になるのかについては、この記事の最後で余談として説明します。 整数化には Math.trunc を使おう このように、parseInt は文字列を引数にすることを前提にしているため、速度の面でも可読性の面でも「小数値を整数値に変換したい」という場合に使うのは望ましくありません。最も望

    Nyoho
    Nyoho 2022/02/08
    知らだったー
  • JavaScript クイズ解説: NaN === NaN の結果はどうなる?

    先日、このようなツイートを書きました。 久しぶりの JavaScript クイズ。 JavaScript において NaN === NaN の結果は次のうちどれになるでしょうか? — Takuo Kihira (@tkihira) September 7, 2021 答えは 4 の「状況によって上記以外もありうる」です。でも、2 や 3 を選んだ方も、もはや正解だといって差し支えないと思います。 解説が長くなったので、ブログ記事にまとめました。 そもそも NaN とは NaN は “Not a Number” を意味する数値です。数値なのに「Not a Number」というのは違和感があるかもしれませんが、数値表現することが出来ない状態を保持するために便宜的に用意された数値、というようなものです。 NaN は、浮動小数点演算において数値では表現出来ない計算をしようとすると登場します。例えば

  • Rust で WebAssembly を出力する

    もう結構前になりますが、RustEmscripten を利用することなく WebAssembly の出力ができるようになりました。それにより、Rust を使った WebAssembly の開発が現実的な選択肢としてさらに力を帯びてきました。 自分の勉強で Rust から WebAssembly に出力するプログラムを書いてみたので、その道筋をご紹介することで自分のような Rust 初心者の方々の WebAssembly 開発の助けになればと思い、この記事を投稿しました。 もし記事中に間違い等がありましたら、是非 @tkihira までご連絡ください。 Emscripten との依存関係を切った Rust つい最近まで、WebAssembly の出力は Emscripten を使うことがほとんどでした。Emscripten は、元々は他言語のプログラムを JavaScript に変換す

    Nyoho
    Nyoho 2018/03/20
  • WebAssembly の基礎

    WebAssembly をご存知でしょうか?2年前に突然発表された新しい仕様です。まだ登場して間もないため、実際に格的に利用しているサービスは数えるほどしかありませんが、Twitter 等を見ているとじわりじわりと評判になっており、技術としての勢いを感じます。 一方で、WebAssembly について言及された資料がまだまだ少なかったり、技術のレイヤーが一般的なフロントエンドエンジニア技術セットとは大きくかけ離れているなどの理由により、WebAssembly について誤解されていることも多々あることを感じました。 そこで今回、あまり技術的に詳細な所まで深入りせず、「専門外の方でもこの程度知っておけば良い」よりちょっと詳しいくらいの内容を目標にして WebAssembly を解説してみたいと思います。 WebAssembly とは WebAssemblywasmとも呼ばれます)とは、ざ

    Nyoho
    Nyoho 2017/11/07
  • スタートアップに転職する時に最低限知っておくべき株の話

    身の回りで大企業からスタートアップに転職するエンジニアの話をよく耳にするようになりましたが、転職に際して株に関して深く考えていない人がかなり多いことに気づきました。最低限この程度は知っておいたほうがいい、という点を自分の視点からまとめてみました。 スタートアップの金銭的な成功 スタートアップの株は「非公開株」です。非公開株というのは、東証などの証券取引所で取引されていない株全般のことを指します。おおっぴらに取引されていないので、非公開株を貰ったところで即座に現金化出来るわけではありません。特に外部から投資を受けるようなスタートアップ企業は、(例外はいくつかあるものの)この非公開株を現金化させることが一つのゴールになります。 非公開株を現金化させる方法は大きく2つあります。一つは株式公開(IPO)で、証券取引所の審査を経て自社株を自由に売買出来るようにすることです。いわゆるマザーズ上場、東証

    Nyoho
    Nyoho 2016/07/24
  • embona - ブラウザで動くBonanzaを作ってみた(その1)

    今回、ちょっとした縁によりBonanzaをブラウザで動かしてみました。Bonanza 6.0のソースコードをほぼそのまま利用して、EmscriptenでJavaScriptに変換しています。 技術的なことに興味はない、すぐに遊んでみたい!という方はこちらからどうぞ。初回に45Mほどダウンロードが発生します!ご注意ください。 http://tkihira.github.io/embona/index.html 上のURLに行くとCPU vs CPUの戦いが始まります。自分で戦いたい方は新規対局で設定してください UI周りは相当手を抜いて実装したために多数バグがあるかと思います。ご容赦ください ブラウザが固まったりしませんが、CPU思考中に手を入力したり新規対局するのには大変反応が重い(というか思考が終わるまで反応しない)のにご注意ください データダウンロードで43Mbyte、さらに内部で展開

    Nyoho
    Nyoho 2015/08/06
  • 配列のランダマイズ、出来ますか?(後編)

    前回のエントリ、配列のランダマイズ、出来ますか?(前編)の続きです。 前回のエントリの最後では、次のようなコードを提示し、どこが問題なのかの疑問を提起しました。 // 配列の初期化 var a = []; for(var i = 0; i < 1000; i++) { a[i] = i; } function swap(s, d) { var t = a[s]; a[s] = a[d]; a[d] = t; } // ランダマイズ、その2 for(var i = 0; i < a.length; i++) { swap(i, (Math.random() * a.length) | 0); } ランダマイズのコードの厄介なところは、1回2回実行したところで問題がわからない点で、このプログラムもぱっと見た感じではきちんとランダマイズされているように見えます。ではどうやって問題があるかを判断す

  • 1