タグ

ブックマーク / yosuke-furukawa.hatenablog.com (26)

  • Node.js にプロセスレベルの Permission が入りそうな話 - from scratch

    Node.js の Permission についての解説を行います。 Node.js に Permission 機能が入りそう。 すでに PR が出されており、 land も間近です。おそらく次かその次くらいのリリースで入ることになるでしょう。 github.com おそらく初期リリースでは experimental flag を付けた上で、 fs, child_process, worker のパーミッションを許可するかどうかに留まり、 net, env などのパーミッションは今後になるでしょう。 以下の方法で利用します。 // filesystemの読み書きを許可する $ node --experimental-permission --allow-fs foo.mjs --allow-fs ファイルシステムの読み書きを行えるようにする --allow-fs-read= に記載のファイ

    Node.js にプロセスレベルの Permission が入りそうな話 - from scratch
  • Node.js の原罪 - from scratch

    Intro ちょうどタコピーの原罪が流行ってるのでこのタイトルにしたけど結構気に入ってる。 d.potato4d.me この話を読んでの感想とここまで大きくなった Node.js の振り返りをしようと思う。 どんなプログラミング言語であってもみんなから使ってもらって開発者をハッピーにしたいと思ってる。ただ最初は良かったと思ってた機能がなんか古臭くなったり、他にクールな機能を持ったものが登場したことによって徐々に飽きられていき、最終的に他の言語に乗り換えられる。 まぁどんな言語も同じだと思う。C言語だって生まれた当初はすごくクールでみんなをハッピーにしてた。今丁度「戦うプログラマー」を読んでるが、C++が出てきて、周りのエンジニアC++ を使おうとするシーンが出てくる。そこで、「あんなの使って何が良いんだ、Cで十分だろ」とWindows NT 開発リーダーのデーブカトラーが言ってたりする

    Node.js の原罪 - from scratch
  • Unhandled Rejection の考え方 - from scratch

    はじめに twitter 上で議論になっていたネタを人の許可を得て記載しています。 Node.js でだけ発生する非同期関連の謎現象を発見した🤔 複数回連続で、非同期処理を挟んだ関数から返した非同期関数を、非同期に実行すると allSettled で待ち受けされずにその場で例外が発生する。 これはバグなのかな...https://t.co/w5C9wKEAOA pic.twitter.com/y3pz4ajndF— shqld🦭 (@shqld) January 4, 2022 実はこの話は会社の中でも一回議論になったネタなんですよね。僕も microtask と呼ばれる Promise キューイングの仕組みとイベントループでタスクをハンドリングする仕組みの両方が組み合わさった時に Unhandled Rejection が起きる理由がわかりにくくなるなーと思っています。誤解していた

    Unhandled Rejection の考え方 - from scratch
    mizdra
    mizdra 2022/01/08
    良い
  • Node.js の assert の小話 - from scratch

    Node.js Advent Calendar の4日目の記事 です。 Node.js の assert は結構歴史が深いです。あまり直接使ってる人は少ないかもしれません。使うとしたら test で使ったりするケースでしょうか。 それも最近は jest に生えてる便利ライブラリを使うほうが多いのかもしれないですね。 unassert なんかで開発中に埋め込んでいるケースもあるかもしれません。このようにたまに使うこともあると思うので、覚えておくと良いでしょう。 assert には 4 年ほど前から strict assertion mode というのが追加されています。 nodejs.org 今日はそんな小話を。 require("assert") は直接使ってはいけなかった。 もう昔の話ですが、 require("assert") が deprecated になっていた時期がありました。知

    Node.js の assert の小話 - from scratch
    mizdra
    mizdra 2021/12/27
    assert/strict 知らなかった
  • Node.js や deno に Web Standard な API をなんでも取り入れるのが良いことなのかについて - from scratch

    この記事は Node.js Advent Calendar の 11 日目の記事です。 qiita.com Web API と Node.js ES2015 以前の Node.js は Web Standard な API の中で足りないものを自分で補う形で進化を続けてきた。 Callback や Event 主体での非同期処理や Common JS な形でロードできる独自のモジュールの仕組みがその筆頭だと思う。ただ逆に Web Standard な API が流行ると今度はそれに追従していかないといけなくなってきた。 ES2015 以後に流行ったものといえば、 Promise 主体での非同期処理であり、 async-await での処理だと思う。また、 ES Modules の台頭もあり、今日では Node.js でも普通に呼び出すことが可能になった。 今ではどちらも Node.js で

    Node.js や deno に Web Standard な API をなんでも取り入れるのが良いことなのかについて - from scratch
    mizdra
    mizdra 2021/12/14
    良い
  • この半年やったこと、継続していること - from scratch

    syohex.hatenablog.com studio3104.hatenablog.com あまりにも同じことをしていたので「せっかくなので」と思って筆を執ることにする。 @syohex さん も @studio3104 さん も僕もだいたい同年代の人たちが同年代の sugyan や色々な方の影響を受けて同じことをしているというのはシンパシーを感じますね。 僕は今の仕事フロントエンドエンジニアであることが多いのですが、「知識に垣根は作らない」をモットーにしているので、色々半年間挑戦してみました。 Leetcode この半年で545問解きました。 github.com sugyan が leetcode に取り組んでいたのも見てたのですが、僕の場合は自分の会社の面接でコード面接をやることがあり、コード面接の時に自分が知らないような事を問題として出すのは恥ずかしいな、という思いから勉強し

    この半年やったこと、継続していること - from scratch
    mizdra
    mizdra 2020/12/19
    すごい…
  • web.dev live 2020 を聴講した - from scratch

    今年はコロナの影響でいろんなイベントがオンラインになったり、中止になったりしてますが、 web.dev live 2020 が7月初頭にやっていたので、聴講してきました。 web.dev その中でも面白かったものについていくつか紹介します。 Day 1 ほぼ Core Web Vitals についての話でした。 以下のトークが面白かったです。 What's new in speed tooling Optimize for Core Web Vitals Core Web Vitals についてはもう既にたくさん資料があると思いますが、一応解説しておきます。 Core Web Vitals 初期表示の新しい指標です。去年くらいからずっと Chrome Dev Summit とかでは言われていて、既にLighthouse をはじめとして、色々なツールでサポートされています。Largest C

    web.dev live 2020 を聴講した - from scratch
    mizdra
    mizdra 2020/07/14
    Pointer Compression面白い / imgタグにwidth/height指定する云々はこういう文脈ですね → https://www.mizdra.net/entry/2020/05/31/192613
  • 実践 Off the main thread - from scratch

    実践 Off the main thread 実際に Off the main thread をやりつつ、パフォーマンスチューニングをする際にどこに気をつけるべきかを今やっているので、それについて話します。 Off the main thread とは JavaScript の処理は基的にメインスレッドで実施します。JavaScriptの実行処理以外にも記述された内容を解釈するためのパース処理やGC処理もメインスレッドをブロックします。メインスレッドの処理が多いとUI jankと呼ばれるガタツキ、チラツキ、画面の固まりの原因になります。 UI jankが発生していると、ユーザーがクリックしたり、text入力をしようとしてから反応するまでの時間(Input Latency)が即時ではなくなります。 このUI jankを無くすために、なるべくメインスレッドを阻害する要因を減らすことが Off

    実践 Off the main thread - from scratch
  • Dual Package Hazard - from scratch

    この記事は Node.js Advent Calendar 2019 の 11 日目の記事です。 qiita.com 今回は全 Node.js で ES Modules を利用するユーザーが知っておくべき Dual Package Hazard について紹介します。 ESModules がフラグ無しでサポートに。 これまでは ES Modules は --experimental-modules フラグが無いと使えませんでしたが、 フラグ無しで Node.js v13.2.0 から使えるようになりました。ES Modules については CodeGrid の記事で詳しく書いているのでそれを一読していただけると理解がスムーズになると思います。逆に読んだ方は Conditional Exports / Dual Package Hazard の節まで飛ばしてもらって構いません。 www.cod

    Dual Package Hazard - from scratch
  • JavaScript Registryの今後 - from scratch

    さて、前回は tink と yarn v2 における CLI 戦略の話でした。次は JavaScript Registry についてです。 ちなみにこの内容が今回 JSConf.EU 2019 で一番盛り上がったトピックです。 JavaScript Registry とは JavaScript Package をバックエンドで管理しているサービスです。 npm が管理しているものがいちばん有名です。他にも GitHub が管理する Registry が公開される予定です。 The economics of Package Management the economics of package management slide: github.com video: www.youtube.com 「Package Managementの経済」というタイトルです。 聴講者からすると、何話すのか

    JavaScript Registryの今後 - from scratch
  • npm, yarn による zero install 戦略 - from scratch

    jsconf.eu 2019 に行ってきました。 特に npm や yarn の今後の話とそもそも Registry をどうしていくか、の話があったのでお知らせします。 そもそも Registry をどうしていくかについては次のエントリで話します。 tink: A Next Generation Package Manager npm の次のコマンドラインツールである tink が紹介されていました。 github.com presentation: github.com video: www.youtube.com そもそも npm の仕組み ローカル依存ファイルを読む (package.json, package-lock.json, shrinkwrap.json) 存在しないパッケージのメタデータをfetchする 木構造を計算して、実行する(npm v3 以降だとflattenする

    npm, yarn による zero install 戦略 - from scratch
  • Yearly Node.js 2018 - from scratch

    Node.js 2018 まとめ この記事は HTML5j カンファレンスで発表した、 Node.js 2018 のまとめの話をブログに起こしたものです。 speakerdeck.com ちょっとずるいですが、この記事一つで Node.js アドベントカレンダーと JavaScript アドベントカレンダーの25日目の記事です。 10月にNode.js v11 がリリース Node.js v11 は変更点はいくつかありますが、v11.0.0ではそんなに大きな機能はありません。代わりに性能向上と安定性向上を行っています。 これにはNode.jsのコア変更ポリシーが関わっています。 Node.js Core Policyである 「Less is More」 Less is More という言葉をNode.js の文脈で最初に使ったのはこの jsconf での発表が初めてですね。 www.you

    Yearly Node.js 2018 - from scratch
  • Chrome Dev Summitに参加しました! - from scratch

    Chrome Dev Summit に初参加しました!色々トピックとして気になったものを紹介してます。後直接 Addy Osmani とか Paul Irish とかに聞く機会があったので、色々ついでに聞いてきました。 Chrome DevRel teams create a Chrome cake #ChromeDevSummit [pic.twitter.com/5u6VPZ0oHb](http://pic.twitter.com/5u6VPZ0oHb)— Yosuke FURUKAWA (@yosuke_furukawa) November 12, 2018 Chrome も 10 周年なんですよねー。感慨深い。 1日目は「現在のChromeでできること、やってること」という感じで、ケーススタディやツールチェインの話が多めでした。 2日目は「未来のChromeでできること、今後やるべ

    Chrome Dev Summitに参加しました! - from scratch
  • Node.js における設計ミス By Ryan Dahl - from scratch

    Ryan Dahl は Node.js の original author ですが、彼の作ったプロダクト deno に関するトークが jsconf.eu 2018 でありました。 Node.js にずっと関わってきた僕が見て非常に興奮するような話だったので、しばらくぶりにブログに書き起こすことにしました。 背景 Ryan Dahl は2009年に Node.js の話を初めて公の場に公開しました。その時の「公の場」というのが「jsconf.eu 2009」です。 www.youtube.com Video: Node.js by Ryan Dahl - JSConf.eu - 2009 この発表から Node.js が広まり、今やサーバのみならず、IoTデバイス、デスクトップアプリなど、様々なところで動作しています。 で、今回はその発表から9年の歳月が経過し、Node.jsに対しての設計不

    Node.js における設計ミス By Ryan Dahl - from scratch
  • NaN === NaN が false な理由とutil.isDeepStrictEqual - from scratch

    NaN === NaN は false NaN、つまりは Not a Number 同士の同値比較が false になるのは、よく JavaScript とかで罠だと言われていますが、罠でもなんでもないです。 false が返るという仕様です。仕様の経緯を追うとすぐに『 IEEE754 という浮動小数点の標準規格で決められているから』、という理由がヒットします。 では IEEE754 ではなんで NaN == NaN を false にしようという話になったのか、というのを調べてみました。 今回はそういう歴史の話です。 IEEE754 現在のプログラミング言語の処理系の多くが採用している浮動小数点の標準規格です。 この標準規格は以下のことを定義している。 - 基形式: 二進および十進の浮動小数点数データの集合。有限な数(符号付ゼロと非正規化数を含む)、無限、特殊な「数ではない」値(NaN

    NaN === NaN が false な理由とutil.isDeepStrictEqual - from scratch
  • Ayo.js について - from scratch

    Ayo.js とは 「Node.js の fork です。」と言ってもまだできたばかりで正直このタイミングで記事にしてもまだ語ることはそんなに多くないです。 ただし、JavaScript界隈が騒ぎになりかけていることは確かです。日でも発言が増えてきたので自分なりにまとめて今時点での話をしようと思います。 ちなみに読み方は好きに読んでくれ、と言われてます。 「アイ・オー」でもいいし、「エイ・ヨー」でも良いとのことです。ネーミング的には昔あった io.js fork騒動を想起させるネーミングになってます。もしも io.js についてご存じない方もいるのであれば、こちらをご参照ください。 yosuke-furukawa.hatenablog.com Ayo.js の目的 https://github.com/ayojs/ayo/blob/zkat/values/VALUES.md ここを見ると

    Ayo.js について - from scratch
  • Node.js で発生した Hash flooding DoS とその内容について - from scratch

    Node.js のセキュリティアップデート 7/11 に Node.js のセキュリティアップデートがリリースされました。 Security updates for all active release lines, July 2017 | Node.js これには複数の脆弱性が報告されており、今回はそのうちの1つの Hash flooding DoS という脆弱性が何なのか、それに対して採用された対策が何なのかについてお話します。 Hash flooding DoS (hashdos) Denial Of Service 、つまりサービス拒否攻撃の一種です。 JavaScript のオブジェクトは内部的にハッシュテーブルとして表現されています。 図はこちらから引用 ハッシュ関数は同じkeyなら同じ値を返しますが、別なkeyなら通常は別な値になります。 ハッシュテーブルのinsert, g

    Node.js で発生した Hash flooding DoS とその内容について - from scratch
  • npm v5 がリリースされた - from scratch

    npm v5 The npm Blog — v5.0.0 npm に v5 がやっとリリースされました。この npm v5 は既に明日リリース予定の Node v8 にバンドルされる予定です。 かいつまんで、機能を紹介します。 Notable Changes package-lock.json!!! faster than npm v4 no more --save option Offline mode sha512 support package-lock.json!!! npm v4 まで問題だった npm-shrinkwrap の問題 を解消するための新しい lock ファイルが生まれました。 shrinkwrap は依存ライブラリを固定するための機能です。npm v4 までは shrinkwrap で固定していましたが、新しく npm v5 になってからはshrinkwrap は

    npm v5 がリリースされた - from scratch
  • util.promisify が追加された - from scratch

    Node.js のコアに util.promisify が追加された。 github.com 今回は util.promisify が持つ役割を中心に Node.js における Promise の立場についても話していけるといいと思う。 util.promisify とは 読んで字のごとく関数を Promise に変換してくれるユーティリティメソッド。 下記のような要領で変換できる。 const util = require('util'); const fs = require('fs'); const stat = util.promisify(fs.stat); stat('.').then((stats) => { console.log(stats); }).catch((error) => { console.error(error); }); async-awaitを使いたい

    util.promisify が追加された - from scratch
  • EventEmitterの代わりにEventEmitter2を使う - from scratch

    このエントリをNode.js Advent Calendarにするか迷いましたが、Advent Calendarとしてはちょっとマニアックだったので、没になった方もアップします。ブログエントリの大掃除中です。 Node.jsを使うならEventEmitterを知っとくべし、という記事とかありますが、EventEmitter使ってるといくつか疑問に当たりますよね。 EventEmitterおさらい EventEmitterの基的な機能をおさらいしておくと、EventEmitterというのは、イベントという単位で処理を行えるようにするためのモジュールで、イベントの受発信を行うことで非同期プログラミングを行いやすくするもの。 emitでイベントを発行 onで発行したイベントを受信 removeListenerでイベントを消すことができる onceで一回だけイベントを受信することができる で、こ

    EventEmitterの代わりにEventEmitter2を使う - from scratch