タグ

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

  • ARM に存在する JavaScript 専用命令「FJCVTZS」を追う(ついでに V8 をビルドする)

    前回の記事では、JavaScript の実行エンジン V8 の JIT 出力コードを読んでみました。記事は M1 Mac 上で動かした結果でしたので、ARM アーキテクチャのアセンブラを読むことになりました。 さてそんな ARM アーキテクチャですが、最近の ARM には FJCVTZS という JavaScript 専用の機械語命令があるのをご存知でしょうか?CPU に、特定の言語(それもコンパイラを持たない JavaScript)専用の命令があると知ったとき、私は大いに驚きました(過去にも Jazelle みたいなものはありましたが) 今回は、この FJCVTZS 命令について、実際にどれだけ効果があるのか、V8 をビルドしながら調べてみましょう。 FJCVTZS 命令とは? FJCVTZS 命令は、Arm v8.3 から導入された JSCVT 命令の一つで、JavaScript の言

  • JavaScript のクロージャーと for 文の let 初期化の例外

    先日、次のような JavaScript クイズを Twitter で出しました。 // JavaScript quiz: 出力は? const a = []; { for(let i = 0; i < 10; i++) { a[i] = () => console.log(i); } } a[3](); { let i; for(i = 0; i < 10; i++) { a[i] = () => console.log(i); } } a[3](); { for(let i = 0; i < 10;) { a[i] = () => console.log(i); i++; } } a[3](); — Takuo Kihira (@tkihira) August 15, 2022 答えは 3, 10, 4 なのですが、for 文の let 初期化専用の例外処理がない場合は 10, 10,

  • document.all の例外仕様を知っていますか

    昨日、ツイッターで次のような JavaScript クイズを出しました。 久しぶりの JavaScript クイズ! function hello(x) { if(typeof x === 'undefined') { alert(x.f()); } } この hello 関数で "Hello, World!" のアラートを表示させることが出来るか? — Takuo Kihira (@tkihira) July 31, 2022 このブログ記事では、この問題について解説します。 解答 答えは「出来る」です。出題者の意図としては document.all を想定しておりました。 document.all は、ブラウザに存在する、非常に特殊なオブジェクトです。 document.all 自体は object 型である。console.log(document.all) とすると内容が確認出来る

  • 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 は文字列を引数にすることを前提にしているため、速度の面でも可読性の面でも「小数値を整数値に変換したい」という場合に使うのは望ましくありません。最も望

  • 10 年前に JavaScript で Flash Player を開発し買収された話

    この記事は、JavaScript で Flash Player の実現を頑張った(もしくは現在進行系で頑張っている)人たちの集う Flash Advent Calendar 2020 に参加しております。 私は過去に自分が設立した会社で ExGame という HTML5 実装の Flash Player(正確には Flash Runtime Engine)を開発し、その会社ごと DeNA に買収(M&A)されました。あまり出来ない体験であるのは間違いないので、Flash が終了を迎える今、改めて振り返ってみようと思います。 Flash Player の開発 今から 10 年前の 2010 年、ちょうど iPhone が普及し始めてきてガラケーのシェアが 8 割から 6 割くらいに落ちようとしていた時期に、私は Flash Player を JavaScript で実装していました。以前この

  • JavaScript で遅延評価を導入して起動を高速化した話

    この記事は、JavaScript で Flash Player の実現を頑張った(もしくは現在進行系で頑張っている)人たちの集う Flash Advent Calendar 2020 に参加しております。 Flash Player を JavaScript で実装していた際に、現場から「起動の高速化」という難しい要求をもらった際、「遅延評価」を導入したところ大変効果がありました。今回、その遅延評価について簡単なご紹介をしたいと思います。 Flash Player 起動までのステップ 当時 Flash Player を JavaScript で提供していた際、当時のスマートフォン端末においてロード完了から最初の画面が出るまで大体 150ms くらいかかっていました。普通の Web ページであれば 150ms はロード時間の中に吸収され許容範囲になる可能性が高いのですが、当時 Flash Pl

  • 事業計画書の作り方、新規ビジネスの考え方

    最近、起業を目指している方などから相談を受ける時に、「事業計画書ありますか?」と雑に聞き返すことが多くなってきました。一般的には「事業計画書に何を書けばいいのか?」をわからない人の方が多いでしょう。今回の記事で、事業計画書で重要な事項について解説します。 事業計画書は一般的に起業家が投資家に見せるために用意するものですが、誰に見せてもすぐにビジネスを理解してもらえることを目的に書くのが良いと思います。株の持ち分や個人情報などの機密情報もあるので公開されることはないですが、業界外の人がみても理解出来るように、かつ途中で飽きないように簡潔に書かれていると素晴らしいでしょう。 事業計画書で重要なことは、そのまま起業において大切なことに繋がります。わかりやすいように、なるべく具体的な例を出しながら解説したいと思います。 事業計画書に書かれているべきリスト まずは早速、事業計画書に書かれているべき項

  • 高速化の観点から new Array(100) を使わない方が良い理由

    別件で V8 の JIT コードの逆アセンブルを眺めている時に気づいたのですが、JavaScriptで new Array(100) という形で配列を作るのは、高速化の観点から言うと V8 においては避けるべき書き方です。 高速化を求める方は、 new Array() や [] で作成して Array#push で追加していくのが良いでしょう。この記事では、その理由を説明します。 今回の記事は、以下の V8 のブログ記事を参考にしております。 https://v8.dev/blog/elements-kinds 「詰まった配列(Packed Array)」と「穴あき配列(Holey Array)」 v8 は内部的に、その配列がどういうタイプの配列であるかの状態を記録しており、その情報を利用して最適化を適用します。状態は内部的には21個あるのですが、今回話題にするのは、その中でも「詰まってい

  • リモートワーク・テクニック「紀平式ポモドーロ」の紹介

    新型コロナウィルスによる状況変化により、「リモートワーク」の注目度があがってきています。「思ったより働けない」や「働きすぎてしまう」という話を目にすることが多く、そういう方々に私が取り入れている「紀平式ポモドーロ」が少しでも参考になればと思って、このブログ記事を書きました。 ポモドーロ🍅とは ポモドーロとはものすごく端的に言うと「25分仕事をする」「5分休憩する」を繰り返す集中方法です。ポモドーロ関連の書籍やネット記事はたくさんあるので、ポモドーロそれ自体に興味のある方は、是非そちらも参照いただければと思います。 この記事を読むにあたっては、「25分仕事をする・5分休憩する、を繰り返す」というのだけを知っていただければ、特に問題ありません。 紀平式ポモドーロ 私の自己流ポモドーロである「紀平式ポモドーロ」も、同じように「25分仕事をして、5分休憩する」を繰り返すことだけです。ただ、5分の

  • Tombo, Inc. をスマートニュース株式会社に売却しました

    昨日ニュースリリースにて発表されましたが、この度 Tombo, Inc. をスマートニュース株式会社に売却しました。 Tombo, Inc. は2014年7月1日にサンフランシスコに設立し、その後4年以上にわたり日アメリカ両方にて活動を重ねてまいりました。関係各所の皆様方にご迷惑ばかりおかけしたことを深く恥じ入るばかりです。当に申し訳ありません。未熟な我々をご支援いただきましたこと、深くお礼を申し上げます。 また売却に対しておめでとうの言葉を頂いた皆様、ありがとうございます。とても嬉しかったです。 Tombo, Inc. 活動の経緯 元々 Tombo, Inc. の目的としては、App Store や Google Play のようなアプリプラットフォームの Web 版を立ち上げることでした。4年前、どれだけ素晴らしい Web アプリを制作したとしても、それを配布する手段が口コミ以外

  • Rust で WebAssembly を出力する

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

    kyo_ago
    kyo_ago 2018/03/19
  • Chrome の隠し機能 chrome://tracing (about:tracing) の使い方

    こんにちは。仕事上で chrome://tracing (about:tracing) を使う必要が出たので、私の知っている限りの情報をここでまとめることにしました。 chrome://tracing の情報は世の中にあまりありません。もし記事中に間違いを見つけられたり、より良い利用方法をご存知の方は、ぜひ @tkihira まで教えてください。よろしくお願いします! なお実際は隠し機能ではなく、ただあまり知られていないだけです。公式の情報は https://www.chromium.org/developers/how-tos/trace-event-profiling-tool ここから辿れると思います。 注意 この機能は、Chrome のインスタンス全体のプロファイルを取るものです。不用意に実行すると、すべての Chrome のタブを巻き込んで落ちます。記事中では Chrome Ca

  • コメント返し(スタートアップに転職する時に最低限知っておくべき株の話)

    前の記事が予想以上に人気がありました。ありがとうございます。 Twitterはてなブックマークでのコメントが面白かったので、いくつかコメント返しをしておこうと思います。 基的には中の人、それも創業者レベルに聞かないとわからないことが多いと思います。投資を受けたことを大っぴらにしない会社も多いです。ただ、CrunchBaseというサイトに情報が記載されていることも多く、もし記載されている場合は大変に参考になります。例えば日だと、Tokyo Otaku Modeさんの情報などが載っています。このサイトによると、TOMさんはシード期に投資を2回受け、シリーズAで$2.64M(約3億円)、シリーズBで$13.7M(約14億円)の投資を受けていることがわかります。 なお、投資額を公開することはありますが、一般的に時価総額は公表しないのが普通ですので、ネット等で調べても各投資家の具体的な株の持ち

  • ExGameの製作で感じたこと

    久々のブログが自分語りになって大変恐縮ですが、将来の自分のためにメモしておきます。 自分がExGameの製作を始めたのは2010年11月2日のことです。iPhone上でFlashが一切動かなかった当時、HTML5でFlash Playerを作れば大当たりする可能性は非常に高そうでした。当時のバイト君に技術検証を進めてもらっていて、その結果2010年8月頃には「いけそうだ」という感覚はありました。 しかし、そこから実際の開発に着手するまでに3ヶ月もかかってしまったのです。その期間の逡巡には色々と含蓄がある気がするので、まとめておこうと思います。 まず、HTML5のFlash Playerはその時点で既に存在していました。具体的には「Gordon」というオープンソースと、「Smoke Screen」という個人ベースのソース非公開プロジェクト(後にオープンソースになったらしいです)の二つがありま

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

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

  • WebAssembly の基礎

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

  • トレタの増井さんに聞く、B2Bサービスのカスタマイズ

    今日の夜、トレタの増井さん(@masuidrive)さんと会って晩御飯をべました。下らない話や日企業の海外進出の話などをする中で、B2Bサービスがカスタマイズを受け入れるというのがどういうことなのか、という話が大変面白かったので、許可を得た上でブログ記事にさせてもらいました。 B2Bとは、Business to Businessの略語であり、企業が主に企業に向かってサービスやプロダクトを提供するタイプのビジネスモデルを指す言葉です。対義語がB2C(Business to Consumer)で、企業が主に個人に向かってサービスやプロダクトを提供するタイプのビジネスモデルを指します。B2Bビジネスの場合は契約1口あたりの金額が大きくなる傾向があり、逆にB2Cビジネスは1口あたりの金額はさほど大きくないのが普通です。 自分も昔の会社でB2Bを経験したことがあるのですが、B2Bをやる上で1つ大

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

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

  • 生WebGL入門:初音ミクの美麗3Dモデルを表示する(前編)

    Special Thanks to @hagat and @teehah for reviewing my articles! 近年、WebGLに流行の兆しが出てきました。WebGLとは、ブラウザに何らプラグインをインストールすることなく、JavaScriptよりGPUを使用した3Dの表示を可能とする技術です。プラグインのインストールが必要ないとはいえ今までは対応ブラウザが少なくあまり実用的ではありませんでしたが、先日のiOS8で正式に対応されたことでモバイルブラウザにおいて対応率が跳ね上がり、スマートフォンにおいてブラウザベースで3Dのゲーム等を作れる可能性が急激に高まりました。 今回WebGL Advent Calendarの一環として、生WebGLで3Dのオブジェクトを表示するところまで挑戦してみます。WebGLにはthree.jsを始めとして有用なライブラリがたくさんあり、大抵の場

  • DeNAを退職し、新しく会社を設立します » nmi.jp

    2014年6月末にて、3年間勤めたDeNAを退職する運びとなりました。これから起業し、そちらに注力したいと思います。 私は、2011年7月に、自分の起業した会社が買収される形でDeNAに参加しました。前の会社ではiPhoneでインストールなくFlash Playerを動かす製品を作成し、それがDeNAに高く評価されて買収されました。以後、DeNAでは3年弱にわたり、HTML5総括という立場で社内外でHTML5に関わる様々な活動に参加しました。 ここ数年間の活動を振り返ると、今の日HTML5、特にモバイルHTML5の技術は世界で最も高いと実感しております。そのような恵まれた環境の中でDeNAでは最先端の研究開発をさせていただきました。力及ばずお蔵入りになったり成果が出なかったプロジェクトもあり多数の方々に迷惑をかけてしまいましたが、同僚にも恵まれ、やりたいことを存分に試すことを許していた

    kyo_ago
    kyo_ago 2014/08/01